Analisi asintotica
Questo termine si riferisce all'analisi delle prestazioni dell'algoritmo partendo dal presupposto che i dati su cui opera l'algoritmo (l' input ) sono, in parole povere, "abbastanza grandi che ingrandirli non cambierà la conclusione". Sebbene non sia necessario specificare la dimensione esatta dell'input (è necessario solo un limite superiore), è necessario specificare il set di dati stesso .
Si noti che finora abbiamo parlato solo del metodo di analisi; non abbiamo specificato esattamente quale quantità stiamo analizzando (complessità temporale? complessità spaziale?), né abbiamo specificato a quale metrica siamo interessati (caso peggiore? caso migliore? media?).
In pratica, il termine analisi asintotica si riferisce comunemente alla complessità del tempo limite superiore di un algoritmo, ovvero la prestazione nel caso peggiore misurata dal tempo di esecuzione totale, che è rappresentata dalla notazione big-Oh (ad esempio un algoritmo di ordinamento potrebbe essere O(nlogn)
).
Analisi ammortizzata
Questo termine si riferisce all'analisi delle prestazioni dell'algoritmo basata su una sequenza specifica di operazioni che ha come obiettivo lo scenario peggiore, ovvero l'analisi ammortizzata implica che la metrica è la prestazione peggiore (sebbene non dica ancora quale quantità viene misurata ). Per eseguire questa analisi, è necessario specificare la dimensione dell'input, ma non è necessario fare ipotesi sulla sua forma.
In parole povere, l'analisi ammortizzata sta scegliendo una dimensione arbitraria per l'input e quindi "giocando" l'algoritmo. Ogni volta che deve essere presa una decisione che dipende dall'input, viene presa la strada peggiore¹. Dopo che l'algoritmo è stato completato, dividiamo la complessità calcolata per la dimensione dell'input per produrre il risultato finale.
¹nota: per essere precisi, il percorso peggiore teoricamente possibile . Se hai un vettore che raddoppia dinamicamente le dimensioni ogni volta che la sua capacità viene esaurita, "caso peggiore" non significa presumere che dovrà raddoppiare ad ogni inserimento perché gli inserimenti vengono elaborati come una sequenza. Ci è consentito (e in effetti dobbiamo) utilizzare lo stato noto per eliminare matematicamente quanti più casi "anche peggiori" possibile, anche se l'input rimane sconosciuto.
La differenza più importante
La differenza fondamentale tra l'analisi asintotica e quella ammortizzata è che la prima dipende dall'input stesso, mentre la seconda dipende dalla sequenza di operazioni che l'algoritmo eseguirà.
Perciò:
- L'analisi asintotica ci consente di affermare che la complessità dell'algoritmo quando viene fornito un input di caso migliore / peggiore / medio di dimensione prossima a N è delimitata da una funzione F (N) - dove N è una variabile
- l'analisi ammortizzata ci permette di affermare che la complessità dell'algoritmo quando gli viene fornito un input di caratteristiche sconosciute ma la dimensione nota N non è peggiore del valore di una funzione F (N) - dove N è un valore noto