Tempo polinomiale e tempo esponenziale


90

Qualcuno potrebbe spiegare la differenza tra algoritmi tempo polinomiale, tempo non polinomiale e tempo esponenziale?

Ad esempio, se un algoritmo impiega O (n ^ 2) tempo, in quale categoria si trova?

Risposte:


85

Controlla questo .

L'esponenziale è peggiore del polinomio.

O (n ^ 2) rientra nella categoria quadratica, che è un tipo di polinomio (il caso speciale dell'esponente è uguale a 2) e migliore dell'esponenziale.

L'esponenziale è molto peggio del polinomio. Guarda come crescono le funzioni

n    = 10    |     100   |      1000

n^2  = 100   |   10000   |   1000000 

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

k ^ 1000 è eccezionalmente enorme a meno che k non sia inferiore a qualcosa come 1.1. Ad esempio, qualcosa come ogni particella nell'universo dovrebbe eseguire 100 miliardi di miliardi di operazioni al secondo per trilioni di miliardi di miliardi di anni per ottenere ciò.

Non l'ho calcolato, ma È COSÌ GRANDE.


29
Ho apprezzato tutte le tue illazioni.
Josephine

7
k ^ 1000 è eccezionalmente enorme se k è sensibilmente maggiore di 1. Se k = 1 è meno impressionante, e se k = 1.00069387 ..., è 2.
Josephine

2
Che ne dici di n! vs k ^ n. Lo so per 2 ^ n (più comune), n! sarà più costoso, ma credo che per un generale k ^ n dove k> 2, n! sarà meno costoso.
Saad

1
Sono contento che tu non abbia detto "miliardi e miliardi". :-)
Tom Russell

@Saad n! sarà sempre più costoso di k ^ n per una costante k, asintoticamente. Hai ragione, tuttavia, in quanto ciò avviene solo una volta raggiunto un valore elevato di n. Secondo l'approssimazione di Stirling, il tempo fattoriale dovrebbe diventare più costoso intorno a quando n = e * k, dove e = 2,71828 ..
inavda

135

Di seguito sono riportate alcune funzioni Big-O comuni durante l'analisi degli algoritmi.

  • O ( 1 ) - tempo costante
  • O ( log (n) ) - tempo logaritmico
  • O ( (log (n)) c ) - tempo polilogaritmico
  • O ( n ) - tempo lineare
  • O ( n 2 ) - tempo quadratico
  • O ( n c ) - tempo polinomiale
  • O ( c n ) - tempo esponenziale
  • O ( n! ) - tempo fattoriale

(n = dimensione dell'input, c = qualche costante)

Ecco il grafico del modello che rappresenta la complessità Big-O di alcune funzioni

modello grafico

Saluti :-)

crediti grafici http://bigocheatsheet.com/


12
Più uno per meno parole e più chiarezza.
user3144836

1 = n ^ 0 quindi anche polinomio
BigChief

46

O (n ^ 2) è il tempo polinomiale. Il polinomio è f (n) = n ^ 2. D'altra parte, O (2 ^ n) è il tempo esponenziale, dove la funzione esponenziale implicita è f (n) = 2 ^ n. La differenza è se la funzione di n colloca n nella base di un esponenziale o nell'esponente stesso.

Qualsiasi funzione di crescita esponenziale crescerà significativamente più velocemente (a lungo termine) di qualsiasi funzione polinomiale, quindi la distinzione è rilevante per l'efficienza di un algoritmo, specialmente per valori elevati di n.


Questa risposta ha un'aria autorevole (buona), ma differisce dalla risposta di @ dheeran, credo, nel fatto che la base nel caso esponenziale sia necessariamente 2. O probabilmente fraintendo e ho solo bisogno di rispolverare la mia algebra.
Tom Russell

21

Tempo polinomiale.

Un polinomio è una somma di termini che sembrano Constant * x^k esponenziali significa qualcosa di simileConstant * k^x

(in entrambi i casi, k è una costante e x è una variabile).

Il tempo di esecuzione degli algoritmi esponenziali cresce molto più velocemente di quello degli algoritmi polinomiali.


18

Esponenziale (Hai una funzione esponenziale se MINIMO UN ESPONENTE dipende da un parametro):

  • Ad esempio f (x) = costante ^ x

Polinomio (Hai una funzione polinomiale se NESSUN ESPONENTE dipende da alcuni parametri della funzione):

  • Ad esempio f (x) = x ^ costante

4
Non mi piace se non viene lasciato nulla della mia risposta originale dopo che è stata modificata da un utente. È una specie di "pesca simile"?
Erhard Dinhobl

2
Devo essere d'accordo. I cambiamenti sono ridicoli.
satya su rotaie

3

tempo polinomiale O (n) ^ k significa che il numero di operazioni è proporzionale alla potenza k della dimensione dell'input

tempo esponenziale O (k) ^ n significa che il numero di operazioni è proporzionale all'esponente della dimensione dell'input


0

o (n sequenza) è la complessità temporale polinimale mentre o (2 ^ n) è la complessità temporale esponenziale se p = np nel caso migliore, nel caso peggiore p = np non è uguale perché quando la dimensione dell'input n cresce così a lungo o il sizer dell'input aumenta così più a lungo va nel caso peggiore e viene gestito in modo che il tasso di crescita della complessità aumenti e dipenda dalla dimensione n dell'input quando l'input è piccolo è polinimale quando l'input è grande e grande quindi p = np non è uguale significa che il tasso di crescita dipende dalla dimensione dell'input "N ". anche l'ottimizzazione, la sat, la clique e l'indipend set si incontravano in modo esponenziale a polinimale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.