Si f (n) es O (g (n)) yf (n) es O (h (n)), ¿significa que g (n) es O (h (n))?

No, esto simplemente no es cierto. Puede decir que si tanto [matemáticas] f (n) \ en O (g (n)) [/ matemáticas] y [matemáticas] g (n) \ en O (h (n)) [/ matemáticas] entonces [matemáticas ] f (n) \ en O (h (n)) [/ math], esto se debe a que Big-Oh mantiene la transitividad .

Lo que puede (al menos) decir es en relación con [matemáticas] g (n) [/ matemáticas] y [matemáticas] h (n) [/ matemáticas] (bajo los supuestos de su pregunta) son los siguientes:

  • [matemáticas] f (n) \ en O (g (n) + h (n)) [/ matemáticas]
  • [matemáticas] f (n) \ en O (\ max \ {g (n), h (n) \}) [/ matemáticas]
  • [matemáticas] f (n) \ en O (g (n) h (n)) [/ matemáticas]

Pero no , en general no puede decir que [matemáticas] g (n) \ en O (h (n)) [/ matemáticas], esto es simplemente porque no tiene idea de [matemáticas] f (n) [/ matemáticas] cuán asintóticamente apretadas son las dos funciones de crecimiento (como límites superiores asintóticos).

Por ejemplo, sea [matemática] f (n) = n [/ matemática], [matemática] g (n) = n ^ 2 [/ matemática] y [matemática] h (n) = n \ log {n} [ /matemáticas]. [matemáticas] n \ en O (n ^ 2) [/ matemáticas] y [matemáticas] n \ en O (n \ log {n}) [/ matemáticas] no implica [matemáticas] n ^ 2 \ en O (n \ log {n}) [/ math] porque [math] n ^ 2 \ notin O (n \ log {n}) [/ math]. Notará en este caso que [math] n \ log {n} \ in O (n ^ 2) [/ math], pero esto puede no ser cierto en general con [math] g [/ math] y [math] h [/ matemáticas].

¡Espero que esto ayude!

f (n) = O (g (n)) tipo de lecturas f (n) <= k * g (n).

Precisamente hablando

f (n) = O (g (n)) <=> Existen N, k> 0 (para todos n> = N, f (n) <= k * g (n)).

En inglés, “for all n> = N” es solo una forma rigurosa de decir “para n lo suficientemente grande” mientras que k> 0 existe para eliminar múltiplos constantes.

Entonces puede leer “f (n) es O (g (n)) yf (n) es O (h (n))” como “f (n) es ‘más pequeño o igual a’ que ambos g (n) y h (n) ”, pero eso no descarta el caso de que g (n) sea ‘más grande’ que h (n).

Esto es similar a cómo a <= by a <= c no le permite concluir b <= c.


Si necesita un contraejemplo,

let f (n) = 1. g (n) = n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!, h (n) = n.

Claramente 1 <= ny 1 <= n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!, pero g (n) definitivamente no está limitado asintóticamente por encima de una función lineal, o cualquier aspecto razonable.

No. A menos que use límites estrechos para las complejidades asintóticas. Un simple ejemplo de contador es:

[matemáticas] n \ en O (n ^ {10}) [/ matemáticas]

[matemáticas] n \ en O (n ^ 2) [/ matemáticas]

pero claramente

[matemáticas] n ^ {10} \ not \ en O (n ^ 2) [/ matemáticas]

Utilice [matemática] f \ en notación O (g) [/ matemática] en lugar de =. Es terriblemente confuso. El resumen es, O () no es una notación de equivalencia, [math] \ Theta [/ math] es. De hecho, lea esto.

[1304.5617] Otra notación asintótica: “Casi”

O (g (n)) es un límite superior, no una clase de equivalencia. Una clase de equivalencia es si f (n) es tanto O (g (n)) como Omega (g (n)). Llamemos a esto Theta (g (n)). Si f (n) es Theta (g (n)) y Theta (h (n)), entonces también gyh son equivalentes. Pero con O (), si a <= by a <= c, ¿resulta que b <= c?