La notación Big Oh (O, Theta, Omega) trata sobre las tasas de crecimiento de las funciones.
Cuando implementa un algoritmo, tiene una cierta característica de cómo cambia el tiempo de ejecución cuando aumenta el conjunto de datos. Ahora, puede optimizar el algoritmo para que funcione más rápido en un factor de 100. Claro, esto es genial, pero esencialmente, sigue siendo el mismo algoritmo. Del mismo modo, en unos pocos años, las computadoras pueden ser el doble de rápido que en la actualidad.
La notación de Landau abstrae estos factores constantes. No le importa si un algoritmo f
siempre es dos veces más rápido que otro algoritmo g
: tal vez g
se pueda optimizar para que se ejecute 4 veces más rápido, o puede comprar hardware más rápido. Si lo miras desde esta perspectiva, podrías decir que son "lo mismo". (Eso no quiere decir que pueda (siempre) ignorar factores constantes en la práctica).
Big oh especifica un límite superior, es similar a la <=
relación.
Estarás de acuerdo en que 1 < 2
es cierto. ¿Eso significa que 1
no puede ser menor que cualquier otro número? Ciertamente no. Hay una cantidad infinita de números que son más grandes que 1
.
Con tasas de crecimiento, es similar. O(n)
denota el conjunto de todas las funciones, que crecen linealmente (o más lentamente). O(n^2)
Por otro lado, denota todas esas funciones, que crecen con la complejidad cuadrática (o más lenta). Estoy seguro de que estará de acuerdo en que una función lineal crece más lentamente que una función cuadrática.
Es por eso que una función puede estar en más de una clase "Big-oh".
Aquí hay una comparación de diferentes funciones con : (de las matemáticas concretas de Knuth)
De izquierda a derecha, las funciones crecen más rápido.
Además, significa que n ^ 2 crece más rápido que n ^ 1 porque 2> 1.
Definiciones
"f crece más rápido o igual de rápido que g"
"f crece más lento o igual de rápido que g"
La combinación de los dos anteriores. Dice que la función f
crece "igualmente rápido" como g
. Es una relación de equivalencia.
Interpretación
Digamos que tiene dos algoritmos, f
y g
.
Omega
Asumir , significa que no importa su presupuesto, no hay una cantidad constante de potencia informática que pueda agregar a su sistema, de modo que f
siempre se ejecute tan rápido como sea posible g
.
Grande oh
Suponiendo , significa que si usted tiene datos suficientes, f
siempre se ejecutarán más rápido que g
, no importa cuánto poder de cómputo que añadir a su sistema.
Prueba
Si realmente está tratando de demostrar esto, debe mostrar utilizando las definiciones de la notación de Landau que su función cumple las condiciones necesarias.
Por lo que necesita para encontrar valores para c
, d
, n_0
de tal manera que la condición se cumple.
Aquí es cómo puede hacer eso para el límite inferior con c
:
Es importante darse cuenta de que me define arbitrariamente c
como ser más pequeño de lo que a-1
está perfectamente bien. La definición de Theta (g) dice que "existe un c
". Puede ser cualquier valor siempre que sea mayor que 0. ( a
Sin embargo, si es un número real positivo, deberá cambiar ligeramente la prueba, ya que a - 1
podría ser negativa)
(Supongo a
que es positivo, de lo contrario, la función siempre será negativa para valores grandes de n
, lo que no tiene sentido para una función que denota el tiempo de ejecución).
Puedes intentar hacerlo para el límite superior, es bastante similar. Si no sabe cómo, puedo proporcionarle una prueba.
Sugerencia: comience con d > a + 1
Atención
Es importante que no lo demuestres al revés. Si asume que (an + b) está en O (n) y avanza desde allí, no ha demostrado lo que quería. Usted tendrá que verificar que todos sus pasos van en ambas manera, es decir, en lugar de =>
que tenga <=>
.