¿Cuál es la diferencia entre O (n!) Vs O (2 ^ n) complejidad de tiempo?

Esa es una muy buena pregunta. Los dos n! y 2 ^ n las funciones son bastante grandes en términos de sus órdenes de crecimiento y eso es lo que las hace diferentes entre sí. ¿No entiendo lo que digo? Eche un vistazo a la tabla a continuación que enumera los órdenes de crecimiento de las diferentes funciones.


Ahora, si ve que ambas funciones crecen tan rápido que sus valores se vuelven astronómicamente grandes incluso para valores bastante pequeños de n.

Tomaría alrededor de 4 × 10 ^ 10 años para que una computadora realice un billón (10 ^ 12) de operaciones por segundo para ejecutar 2 ^ 100 operaciones. ¡Aunque esto es incomparablemente más rápido de lo que tendría que ejecutar 100! operaciones, que es más de 4.5 mil millones (4.5 × 10 ^ 9) años, que es la edad estimada del planeta Tierra.

Por lo tanto, existe una tremenda diferencia entre los órdenes de crecimiento de las funciones 2 ^ ny n !. En general, ambas se denominan “funciones de crecimiento exponencial” a pesar del hecho de que, estrictamente hablando, solo las primeras deben denominarse como tales.

Los algoritmos que requieren un número exponencial de operaciones son prácticos para resolver solo problemas de tamaños muy pequeños.

Espero haber aclarado tu pregunta adecuadamente.

O (n!) Le da muchos más recursos (en términos de tiempo) al solucionador.

Verifique las siguientes tres figuras:

Figura 1: Justo después de n = 3, la clase factorial toma la delantera.

Figura 2: Aumente la diferencia de recursos muy rápidamente justo después de 5 pasos más.

Figura 3: La clase factorial muestra la clase exponencial como una sola partícula de arena en comparación con el Monte Himalaya. Y esto es justo cuando su entrada es de solo 15 unidades.

Como puede observar, a medida que aumenta el tamaño de entrada, también lo hace la diferencia en una “velocidad factorial”.

Básicamente, la jerarquía de tiempo dice que cuantos más recursos de tiempo tenga, más problemas podrá resolver.

Aquí está la diferencia:

para saber la diferencia, intente mostrar un ^ n

Cuando registra ambos lados obtiene: n log a

cuando n crece, agregas números grandes arbitrarios a la derecha mientras que la izquierda se multiplica por la misma constante … así que está claro cuál crece más rápido …

El gráfico muestra la tasa de aumento para algunos de los grandes tiempos comunes de O.

Como puede ver, 0 (x!) Es mucho peor que O (2 ^ x). Hay muchos
de tiempos de ejecución peores que 0 (x!) también, como O (x ^ x) u O (2x * x!).

La aproximación de Stirling para n! es proporcional a n ^ n – esto es mayor que 2 ^ n

Tiempo completamente O (n!) Es mayor que O (2 ^ n)
Entonces, un programa con complejidad de tiempo O (2 ^ n) es más eficiente.

More Interesting

Dados n puntos en un plano 2D, ¿cómo encontrarías el número máximo de puntos que se encuentran en la misma línea recta? Proporcione un algoritmo para resolver este problema.

¿De dónde aprendo la estructura de datos?

¿Cuál debería ser mi rutina para dominar el algoritmo y la estructura de datos?

¿Cuál es una explicación fácil de entender del algoritmo de Reddit?

¿Cómo manejan las personas el error de profundidad de recursión máxima excedida sin reescribir el código de forma iterativa? (en la programación dinámica de arriba hacia abajo)

Dado un gráfico no dirigido y dos conjuntos de nodos, ¿cuál es el mejor algoritmo para verificar que cada elemento del primer conjunto sea adyacente a cada elemento del segundo conjunto?

¿Cuál es la comparación en algoritmo de Sieve of Sundaram y Sieve of Eratosthenes con tiempo-complejidad?

¿Qué algoritmo usa Google Knowledge Graph? ¿Con qué precisión funciona?

¿Cuál es el mejor algoritmo para girar a la izquierda en los semáforos?

Cómo resolver un problema después de unos días si no pude encontrar la más mínima idea de cómo resolver ese problema

Cómo implementar prácticamente algoritmos enseñados por Andrew Ng en su curso de aprendizaje automático

¿Cómo funciona la clasificación bayesiana? ¿Cuáles son algunas de sus aplicaciones?

Cómo aprender qué algoritmo usar en un conjunto de problemas en particular

¿Qué es un contador Loglog?

¿Por qué ocurre el peor de los casos en Max-Heapify cuando la fila final del árbol está medio llena?