Entiendo que es más rápido que Θ ( n log n ) y más lento que Θ ( n / log n ) . Lo que me resulta difícil de entender es cómo comparar Θ ( n log n ) y Θ ( n / log n ) con Θ ( n f ) donde 0 < f < 1 .
Por ejemplo, ¿cómo decidimos vs. Θ ( n 2 / 3 ) o Θ ( n 1 / 3 )
Me gustaría tener algunas instrucciones para proceder en tales casos. Gracias.
es el inverso de 2 n . Así como 2 n crece más rápido que cualquier polinomio n k, independientemente de cuán grande sea una k finita, log n crecerá más lentamente que cualquier función polinomial n k, independientemente de cuán pequeño sea un cero positivo, k .logn 2n 2n nk k logn nk k
fuente
Para muchos algoritmos, a veces sucede que las constantes son diferentes, lo que hace que una u otra sea más rápida o más lenta para tamaños de datos más pequeños, y no están tan bien ordenadas por la complejidad algorítmica.
Dicho esto, si solo consideramos los tamaños de datos súper grandes , es decir. cuál finalmente gana, luego
O(n^f)
es más rápido queO(n/log n)
para0 < f < 1
.Una gran parte de la complejidad algorítmica es determinar qué algoritmo es finalmente más rápido, por lo tanto, saber que
O(n^f)
es más rápido queO(n/log n)
para0 < f < 1
, a menudo es suficiente.Una regla general es que multiplicar (o dividir) por
log n
eventualmente será insignificante en comparación con multiplicar (o dividir) porn^f
cualquieraf > 0
.Para mostrar esto más claramente, consideremos lo que sucede cuando n aumenta.
¿Notar cuál disminuye más rápidamente? Es la
n^f
columna.Incluso si
f
estuviera más cerca de 1, lan^f
columna comenzará más lentamente, pero a medida que n se duplica, la velocidad de cambio del denominador se acelera, mientras que el denominador de lan/log n
columna parece cambiar a una velocidad constante.Tracemos un caso particular en un gráfico
Fuente: Wolfram Alpha
Seleccioné
O(n^k)
tal quek
está bastante cerca de 1 (at0.9
). También seleccioné las constantes para que inicialmenteO(n^k)
sea más lento. Sin embargo, tenga en cuenta que finalmente "gana" al final, y lleva menos tiempo queO(n/log n)
.fuente
n^k
eventualmente es más rápido, incluso si las constantes se seleccionan de modo que inicialmente sea más lento.fuente
Al comparar los tiempos de ejecución, siempre es útil compararlos utilizando grandes valores de n. Para mí, esto ayuda a desarrollar la intuición sobre qué función es más lenta
En su caso, piense en n = 10 ^ 10 y a = .5
Por lo tanto, O (n ^ a) es más rápido que O (n / logn), cuando 0 <a <1 he usado solo un valor, sin embargo, puede usar múltiples valores para construir la intuición sobre la función
fuente
O(10^9)
, pero el punto principal acerca de intentar algunos números para construir la intuición es correcto.Aplicado a su ejemplo:
Se podría decir: los poderes de n dominan los poderes del registro, que dominan los poderes del registro.
Fuente: Matemáticas concretas, p. 441
fuente