La respuesta es (1) [matemáticas] f (g (n)) \ en O (n) [/ matemáticas] también. La intuición detrás de esto es que si [matemática] f [/ matemática] y [matemática] g [/ matemática] están asintóticamente delimitadas por una función lineal, entonces su composición también lo es.
Pero tratemos de demostrarlo matemáticamente y volvamos a la definición formal de la notación “Big O” para demostrarlo. Trataré de describir en detalle el proceso de pensamiento a continuación.
La definición es, si [matemática] f [/ matemática] y [matemática] h [/ matemática] son dos funciones definidas en algún subconjunto de los números reales (aquí, ya que usa la letra [matemática] n [/ matemática], asumiremos los enteros): [matemáticas] f (n) \ en O (h (n)) [/ matemáticas] si y solo si podemos encontrar una constante positiva [matemáticas] M [/ matemáticas] y un valor [ math] n_0 [/ math] tal que, por cada [math] n> n_0 [/ math] tenemos [math] f (n) <M h (n). [/ math]
- Sea X la solución del costo O (n ^ k) para un problema Q en NP-c. ¿Implicaría que existe una solución de costo O (n ^ k) para todos los problemas Q 'en NP-c?
- ¿Cómo se copia el contenido de un árbol de búsqueda binario que tiene emparejamientos K, V?
- ¿Cuál es la diferencia entre Manhattan y las medidas de distancia euclidiana?
- ¿Cómo funciona el algoritmo de comprobación de cuentas falsas de Facebook?
- ¿Podemos resolver este problema SPOJ.com - Problema PT07Z de esta manera?
¿Qué sabemos?
- (a) Sabemos que [matemáticas] f (n) \ en O (n) [/ matemáticas]. Por lo tanto, significa que podemos encontrar [matemática] M_0, n_0 [/ matemática] tal que por cada [matemática] n [/ matemática] mayor que [matemática] n_0 [/ matemática], [matemática] f (n) <M_0 n [/matemáticas]
- (b) También sabemos que [matemática] g (n) \ en O (n) [/ matemática], por lo que podemos encontrar [matemática] M_1, n_1 [/ matemática] tal que por cada [matemática] n [/ matemática ] mayor que [matemáticas] n_1 [/ matemáticas], [matemáticas] g (n) <M_1 n [/ matemáticas]
Para probar (1) , necesitamos encontrar [matemática] M_2, n_2 [/ matemática] de modo que por cada [matemática] n [/ matemática] mayor que [matemática] n_2 [/ matemática] tengamos [matemática] f (g (n)) <M_2 n [/ matemáticas]. ¿Cómo combinamos los dos puntos anteriores para encontrar [matemáticas] M_2 [/ matemáticas] y [matemáticas] n_2 [/ matemáticas]?
La viñeta (a) nos dice que, para cualquier valor de [matemática] n ‘[/ matemática] tal que [matemática] n’> n_0, f (n ‘) <M_0 n' [/ matemática], ¿verdad? Como estamos componiendo [matemática] f [/ matemática] y [matemática] g [/ matemática], los valores de [matemática] n '[/ matemática] que nos interesan son de la forma [matemática] n' = g (n )[/matemáticas]. Por lo tanto, debemos pensar qué valores puede tomar [math] g [/ math] y cómo se relacionan con [math] n_0 [/ math] para diferentes valores de [math] n [/ math].
Tomemos cualquier [matemática] n> max (n_1, n_0) [/ matemática] (es decir, [matemática] n> n_0 [/ matemática] y [matemática] n> n_1 [/ matemática]). Tenemos dos casos:
- [matemáticas] g (n) <n_0 [/ matemáticas]. Si [math] f [/ math], como se afirma aquí, es una función de enteros, entonces solo puede tomar un número finito de valores entre [math] 0 [/ math] y [math] n_0 [/ math]. Y cualquier número finito de valores tiene un valor máximo. Llamémoslo [matemáticas] K [/ matemáticas] aquí. En este caso, siempre tenemos [matemáticas] f (g (n)) = 1 [/ matemática] se deduce que [matemática] f (g (n)) <K <K n [/ matemática] entonces [matemática] f (g (n)) <Kn [/ matemáticas].
Nota: si [math] f [/ math] es una función de números reales, entonces las declaraciones anteriores todavía funcionan siempre que [math] f [/ math] esté acotado a mi valor máximo antes de [math] n_0 [/ math] . - [matemáticas] g (n)> n_0 [/ matemáticas]. Lo cual, por el punto (a) , asegura [matemática] f (g (n)) <M_0 g (n) [/ matemática]. Luego, por la viñeta (b) , ya que también asumimos [matemática] n> n_1 [/ matemática], [matemática] g (n) <M_1 n [/ matemática] por lo que se deduce que [matemática] f (g (n) ) <M_0 M_1 n [/ math].
Los dos puntos anteriores aseguran que, para cualquier [matemática] n> máx (n_1, n_0) [/ matemática], tendremos [matemática] f (g (n)) <máx. (M_0 M_1, K) n [/ matemáticas]. Y esto, por definición, significa que [matemáticas] f (g (n)) \ en O (n) [/ matemáticas] – tomar [matemáticas] n_2 = max (n_1, n_0) [/ matemáticas] y [matemáticas] M_2 = max (M_0 M_1, K) [/ matemáticas].
[Editar: mi primera respuesta fue incorrecta, ¡gracias Henrique Gomes y Ed Itz por hacerme repensarlo!]