COMPLESSITÀ COMPUTAZIONALE

PRESTAZIONI DEGLI ALGORITMI

Le prestazioni degli algoritmi possono essere confrontate con diversi metodi. Uno di questi consiste, semplicemente, nell’eseguire molti test per ogni algoritmo e nel confrontarne i tempi di esecuzione misurati.

 

Un altro metodo consiste nel confrontare i fattori di crescita delle stime di costo.

Per esempio, possiamo affermare che il tempo di ricerca è O(n) (O grande di n).

Questo significa che il tempo di ricerca, all’aumentare di n, è proporzionale al numero di elementi n nella lista. Di conseguenza ci aspettiamo che il tempo di ricerca risulti triplicato se la dimensione della lista aumenta di un fattore tre.

Se un algoritmo richiede O(n2) tempo, allora il suo tempo di esecuzione non cresce più del quadrato della dimensione della lista. 

n

lg n

n lg n

n2

2n

1

0

0

1

2

16

4

64

256

65536

256

8

2.048

65.536

1,15...* 1077 

4.096

12

49.152

16.777.216

...

65.536

16

1.048.565

4.294.967.296

...

1.048.476

20

20.969.520

1.099.301.922.576

...

16.775.616

24

402.614.784

281.421.292.179.456

...

 

La tabella illustra i valori con cui crescono le varie funzioni.
Si vede chiaramente che esiste una notevole differenza tra i problemi che richiedono algoritmi eseguibili in tempi che dipendono da potenze di n e quelli che richiedono tempi di tipo esponenziale.

 

Un fattore di crescita O(lg n) si ha per gli algoritmi simili alla ricerca binaria. La funzione lg (logaritmo in base 2) cresce di uno quando n raddoppia. Si ricordi che, con la ricerca binaria, è possibile ricercare fra il doppio dei valori con un confronto in più. Pertanto la ricerca binaria è un algoritmo di complessità O(lg n).