Tiempo polinomial y tiempo exponencial

90

¿Alguien podría explicar la diferencia entre los algoritmos de tiempo polinomial, tiempo no polinómico y tiempo exponencial?

Por ejemplo, si un algoritmo toma O (n ^ 2) tiempo, ¿en qué categoría está?

Abdul Samad
fuente

Respuestas:

85

Mira esto .

Exponencial es peor que polinomio.

O (n ^ 2) cae en la categoría cuadrática, que es un tipo de polinomio (el caso especial del exponente es igual a 2) y mejor que exponencial.

Exponencial es mucho peor que polinomio. Mira como crecen las funciones

n    = 10    |     100   |      1000

n^2  = 100   |   10000   |   1000000 

k^n  = k^10  |   k^100   |    k^1000

k ^ 1000 es excepcionalmente grande a menos que k sea más pequeño que algo así como 1.1. Por ejemplo, algo así como cada partícula del universo tendría que hacer 100 mil millones de billones de billones de operaciones por segundo durante billones de billones de billones de años para lograrlo.

No lo calculé, pero ES ASÍ DE GRANDE.

hvgotcodes
fuente
29
Disfruté de todas tus ilusiones.
Josephine
7
k ^ 1000 es excepcionalmente grande si k es apreciablemente mayor que 1. Si k = 1 es menos impresionante, y si k = 1.00069387 ..., es 2.
Josephine
2
¿Qué tal n? vs k ^ n. ¡Lo sé por 2 ^ n (más común), n! será más caro, pero creo que para un k ^ n general donde k> 2, n! será menos costoso.
Saad
1
Me alegra que no hayas dicho "miles de millones y miles de millones". :-)
Tom Russell
@Saad n! siempre será más caro que k ^ n para una constante k, asintóticamente. Sin embargo, tiene razón en que este es solo el caso una vez que alcanzamos un valor alto de n. Según la aproximación de Stirling, el tiempo factorial debería volverse más caro cuando n = e * k, donde e = 2.71828 ..
inavda
136

A continuación se muestran algunas funciones comunes de Big-O al analizar algoritmos.

  • O ( 1 ) - tiempo constante
  • O ( registro (n) ) - tiempo logarítmico
  • O ( (log (n)) c ) - tiempo polilogarítmico
  • O ( n ) - tiempo lineal
  • O ( n 2 ) - tiempo cuadrático
  • O ( n c ) - tiempo polinomial
  • O ( c n ) - tiempo exponencial
  • O ( n! ) - tiempo factorial

(n = tamaño de la entrada, c = alguna constante)

Aquí está el gráfico modelo que representa la complejidad Big-O de algunas funciones

modelo gráfico

salud :-)

créditos gráficos http://bigocheatsheet.com/

Mohanraj Balasubramaniam
fuente
12
Más uno por menos palabras y más claridad.
user3144836
1 = n ^ 0 también polinomio
BigChief
46

O (n ^ 2) es el tiempo polinomial. El polinomio es f (n) = n ^ 2. Por otro lado, O (2 ^ n) es el tiempo exponencial, donde la función exponencial implícita es f (n) = 2 ^ n. La diferencia es si la función de n coloca a n en la base de una exponenciación o en el exponente mismo.

Cualquier función de crecimiento exponencial crecerá significativamente más rápido (a largo plazo) que cualquier función polinomial, por lo que la distinción es relevante para la eficiencia de un algoritmo, especialmente para valores grandes de n.

Josefina
fuente
Esta respuesta tiene un aire autoritario (bueno), pero difiere de la respuesta de @ dheeran, creo, en si la base en el caso exponencial es necesariamente 2. O probablemente no entiendo bien y solo necesito desempolvar mi álgebra.
Tom Russell
21

Tiempo polinomial.

Un polinomio es una suma de términos que parecen Constant * x^k exponencial significa algo comoConstant * k^x

(en ambos casos, k es una constante y x es una variable).

El tiempo de ejecución de los algoritmos exponenciales crece mucho más rápido que el de los polinomiales.

Clemente
fuente
18

Exponencial (tiene una función exponencial si MINIMAL ONE EXPONENT depende de un parámetro):

  • Por ejemplo, f (x) = constante ^ x

Polinomio (tiene una función polinomial si NO EXPONENTE depende de algunos parámetros de la función):

  • Por ejemplo, f (x) = x ^ constante
Erhard Dinhobl
fuente
4
No me gusta si no queda nada de mi respuesta original después de que un usuario la haya editado. ¿Es esto una especie de "pesca similar"?
Erhard Dinhobl
2
Tengo que estar de acuerdo. Los cambios son ridículos.
satya on rails
3

tiempo polinomial O (n) ^ k significa El número de operaciones es proporcional a la potencia k del tamaño de la entrada

tiempo exponencial O (k) ^ n significa El número de operaciones es proporcional al exponente del tamaño de la entrada

Estudiante
fuente
0

o (n sequre) es complejidad de tiempo polinimal mientras que o (2 ^ n) es complejidad de tiempo exponencial si p = np en el mejor de los casos, en el peor de los casos p = np no es igual porque cuando el tamaño de entrada n crece tanto o el tamaño de entrada aumenta tanto más tiempo va al peor de los casos y manejo, por lo que la tasa de crecimiento de la complejidad aumenta y depende del tamaño n de la entrada cuando la entrada es pequeña es polinimal cuando el tamaño de la entrada es grande y grande, por lo que p = np no es igual, significa que la tasa de crecimiento depende del tamaño de la entrada "N ". optimización, sat, clique e independ set también se encontraron en exponencial a polinimal.

nasir
fuente