Dopo aver analizzato la complessità in tempo di alcuni algoritmi possiamo osservare che
- il caso ottimo di un algoritmo è quasi sempre costante
- e non sarebbe significativo per la bassa probabilità che si presenti
- il caso pessimo e il caso medio dipendono dalla dimensione dei dati
- è difficile calcolare con precisione le costanti moltiplicative
- per n piccolo è difficile decidere tra due algoritmi
- mentre per n abbastanza grande la differenza di comportamento diventa evidente
Per dare una misura della complessità in tempo di un algoritmo si preferisce
- dare una misura approssimata del calcolo del tempo di esecuzione T(n)
- studiare il caso pessimo oppure il caso medio
- valutare il comportamento per n sufficientemente grande…
Definizione
Si introduce la complessità asintotica e la notazione O(f(n))
una funzione g(n) è O(f(n)), e si legge g(n) è dell’ordine o grande di f(n), se esistono una costante moltiplicativa c ed un numero naturale n0 tali che g(n) ≤ c f(n), per una certa c e per ogni n ≥ n0
Esempio
Data la funzione g(n)=2n2+4n+2, scegliendo opportunamente i valori c=2.1 e n0 ≥ 41 si ha
g(41) = 3528 < 3530.1 = 2.1(41)2 = c n02
allora
g(n) < 2.1 n2, per n ≥ 41
e quindi
g(n) ∈ O(n2)
In pratica
- le costanti moltiplicative diventano trascurabili
- le combinazioni lineari di funzioni diventano trascurabili
- è sufficiente individuare la funzione più pesante
- tutte le funzioni lineari sono dell’ordine O(n)
- tutte le funzioni quadratiche sono dell’ordine O(n2)
- …
La complessità in tempo viene riassunta in una funzione più significativa che rappresenta la complessità in tempo asintotica.
Esempi
Le costanti sono spropositate per evidenziare l’aspetto asintotico… della complessità
- T1(n)=2n+400log2n ∈ O(n)
- T2(n)=2n3+400n ∈ O(n3)
- T3(n)=20.000+log10n ∈ O(logn)
- T4(n)=3n+400n4+100.000.000 ∈ O(2n)
Tabella
Le funzioni di complessità interessanti in ambito informatico sono relativamente poche
- O(1), costante
- O(log n), logaritmica
- O(n), lineare
- O(n log n), enne-log-enne
- O(n2), quadratica
- O(nk), polinomiale
- O(2n), esponenziale