In parole povere, la complessità temporale è un modo per riassumere come il numero di operazioni o il tempo di esecuzione di un algoritmo aumenta all'aumentare della dimensione dell'input.
Come la maggior parte delle cose nella vita, un cocktail party può aiutarci a capire.
SU)
Quando arrivi alla festa, devi stringere la mano a tutti (fai un'operazione su ogni oggetto). All'aumentare del numero di partecipanti N, aumenta il tempo / lavoro necessario per stringere la mano a tuttiO(N) .
Perché O(N)e no cN?
C'è una variazione nella quantità di tempo necessaria per stringere la mano alle persone. Potresti calcolare la media e catturarlo in una costante c. Ma l'operazione fondamentale qui --- stringere la mano a tutti --- sarebbe sempre proporzionale O(N), qualunque cosa cfosse. Quando discutiamo se dovremmo andare ad un cocktail party, siamo spesso più interessati al fatto che dovremo incontrare tutti che nei minimi dettagli di come sono quegli incontri.
O (N ^ 2)
L'ospite del cocktail party vuole che tu faccia un gioco stupido in cui tutti incontrano tutti gli altri. Pertanto, devi incontrare N-1altre persone e, poiché la persona successiva ti ha già incontrato, devono incontrare altre N-2persone e così via. La somma di questa serie è x^2/2+x/2. Con l'aumentare del numero di partecipanti, il x^2termine diventa molto veloce , quindi lasciamo cadere tutto il resto.
O (N ^ 3)
Devi incontrare tutti gli altri e, durante ogni incontro, devi parlare di tutti gli altri nella stanza.
O (1)
L'host vuole annunciare qualcosa. Bevono un bicchiere di vino e parlano ad alta voce. Tutti li ascoltano. Si scopre che non importa quanti partecipanti ci siano, questa operazione richiede sempre lo stesso tempo.
O (registro N)
L'host ha presentato tutti al tavolo in ordine alfabetico. Dov'è Dan? Pensi che debba essere da qualche parte tra Adam e Mandy (certamente non tra Mandy e Zach!). Detto questo, è tra George e Mandy? No. Deve essere tra Adam e Fred, e tra Cindy e Fred. E così via ... possiamo localizzare in modo efficiente Dan guardando metà del set e poi metà di quel set. Alla fine, guardiamo O (log_2 N) individui.
O (N log N)
Puoi trovare dove sederti al tavolo usando l'algoritmo sopra. Se un gran numero di persone venisse al tavolo, uno alla volta, e tutti lo facessero, ciò richiederebbe O (N log N) . Questo risulta essere il tempo necessario per ordinare qualsiasi raccolta di articoli quando devono essere confrontati.
Caso migliore / peggiore
Arrivi alla festa e devi trovare Inigo: quanto tempo ci vorrà? Dipende da quando arrivi. Se tutti si aggirano, hai colpito il caso peggiore: ci vorrà del O(N)tempo. Tuttavia, se tutti sono seduti al tavolo, ci vorrà soloO(log N) tempo. O forse puoi sfruttare il potere urlante del bicchiere di vino dell'host e ci vorrà soloO(1) tempo.
Supponendo che l'host non sia disponibile, possiamo dire che l'algoritmo di individuazione di Inigo ha un limite inferiore di O(log N)e un limite superiore diO(N) , a seconda dello stato della parte al momento dell'arrivo.
Spazio e comunicazione
Le stesse idee possono essere applicate per comprendere come gli algoritmi usano lo spazio o la comunicazione.
Knuth ha scritto un bel articolo sull'ex intitolato "The Complexity of Songs" .
Teorema 2: Esistono canzoni arbitrariamente lunghe di complessità O (1).
PROVA: (grazie a Casey e alla Sunshine Band). Considera le canzoni Sk definite da (15), ma con
V_k = 'That's the way,' U 'I like it, ' U
U = 'uh huh,' 'uh huh'
per tutti i k.