analisi della complessità degli algoritmi a. ferrari

20
Analisi della Analisi della complessità degli complessità degli algoritmi algoritmi A. Ferrari A. Ferrari

Upload: innocenzo-ruggeri

Post on 01-May-2015

221 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Analisi della complessità degli algoritmi A. Ferrari

Analisi della Analisi della complessità degli complessità degli

algoritmialgoritmiA. FerrariA. Ferrari

Page 2: Analisi della complessità degli algoritmi A. Ferrari

Complessità Complessità computazionalecomputazionale

Obiettivo principale:Obiettivo principale:Confrontare algoritmi corretti che Confrontare algoritmi corretti che risolvono lo stesso problema, allo scopo risolvono lo stesso problema, allo scopo di scegliere quello migliore in relazione a di scegliere quello migliore in relazione a uno o più parametri di valutazione.uno o più parametri di valutazione.

Page 3: Analisi della complessità degli algoritmi A. Ferrari

Valutazione con Valutazione con un parametroun parametro

Se si ha a disposizione un solo Se si ha a disposizione un solo parametro per valutare un algoritmo, parametro per valutare un algoritmo, per esempio il tempo dper esempio il tempo d’’esecuzione, è esecuzione, è semplice la scelta: semplice la scelta: il più veloce. il più veloce.

Ogni altra caratteristica non viene Ogni altra caratteristica non viene considerata.considerata.

Page 4: Analisi della complessità degli algoritmi A. Ferrari

Valutazione con Valutazione con più parametripiù parametri

Nel caso di due parametri normalmente Nel caso di due parametri normalmente si considerasi considera

il tempo.il tempo.numero di passi (istruzioni) che occorrono numero di passi (istruzioni) che occorrono per produrre il risultato finale.per produrre il risultato finale.Passi e non secondi o millisecondi perché il Passi e non secondi o millisecondi perché il tempo varia al variare delle potenzialità tempo varia al variare delle potenzialità del calcolatore.del calcolatore.

lo spaziolo spaziooccupazione di memoriaoccupazione di memoria

Page 5: Analisi della complessità degli algoritmi A. Ferrari

Durata delle Durata delle istruzioniistruzioni

Le istruzioni non hanno tutte lo stesso Le istruzioni non hanno tutte lo stesso tempo di esecuzione.tempo di esecuzione.

Il tempo di esecuzione di un algoritmo Il tempo di esecuzione di un algoritmo è una somma pesata delle istruzioni:è una somma pesata delle istruzioni:

TTtotaletotale=(i=(i00*t*t00*n*n00)+(i)+(i11*t*t11*n*n11)+…+(i)+…+(imm*t*tmm*n*nmm))

iijj è l è l’’istruzione, istruzione, ttjj è il costo dell è il costo dell’’istruzione, il tempo di esecuzione istruzione, il tempo di esecuzione nnjj è il numero di volte che viene eseguita. è il numero di volte che viene eseguita.

Page 6: Analisi della complessità degli algoritmi A. Ferrari

EfficienzaEfficienzaLL ’’approssimazione di una funzione con approssimazione di una funzione con una funzione asintotica è molto utile una funzione asintotica è molto utile per semplificare i calcoliper semplificare i calcoli

La notazione asintotica di una funzione La notazione asintotica di una funzione descrive il comportamento in modo descrive il comportamento in modo semplificato, ignorando dettagli della semplificato, ignorando dettagli della formula.formula.

Esempio: per valori sufficientemente Esempio: per valori sufficientemente alti di x il comportamento della funzione alti di x il comportamento della funzione f(x) = xf(x) = x22 – 3x + 1 – 3x + 1 è approssimabile con è approssimabile con la funzione la funzione f(x) = xf(x) = x22..

Page 7: Analisi della complessità degli algoritmi A. Ferrari

Misura Misura dell’efficienzadell’efficienza

Per un algoritmo con un input di Per un algoritmo con un input di dimensione n, possiamo definirne dimensione n, possiamo definirne ll’’efficienza dicendo cheefficienza dicendo che““ll’’algoritmo per calcolare il risultato algoritmo per calcolare il risultato finale impiega al più finale impiega al più f(n)f(n) passi passi””

““ll’’algoritmo ha complessità algoritmo ha complessità f(n)f(n)””..

Page 8: Analisi della complessità degli algoritmi A. Ferrari

Terminologia (1)Terminologia (1)O (O grande) equivale al simbolo <=. O (O grande) equivale al simbolo <=.

Corrisponde a Corrisponde a ““al più comeal più come””. . ““la complessità dellla complessità dell’’algoritmo è O(f(algoritmo è O(f(nn))))”” equivale equivale a a ““il tempo dil tempo d’e’esecuzione dellsecuzione dell’’algoritmo è <= a algoritmo è <= a f(f(nn)) ””..

o (o piccolo) equivale al simbolo <. o (o piccolo) equivale al simbolo <. ““la complessità dellla complessità dell’’algoritmo è o(f(algoritmo è o(f(nn))))”” equivale equivale a a ““il tempo dil tempo d’e’esecuzione dellsecuzione dell’’algoritmo è algoritmo è strettamente < a f(strettamente < a f(nn)) ””..

Θ (teta) corrispondente al simbolo =. Θ (teta) corrispondente al simbolo =. ““la complessità dellla complessità dell’’algoritmo è Θ(f(algoritmo è Θ(f(nn))))”” equivale equivale a a ““il tempo dil tempo d’e’esecuzione dellsecuzione dell’’algoritmo è = a f(algoritmo è = a f(nn))””

Page 9: Analisi della complessità degli algoritmi A. Ferrari

Terminologia (2)Terminologia (2)Ω (omega grande) equivale al simbolo Ω (omega grande) equivale al simbolo >=.>=.

““la complessità dellla complessità dell’’algoritmo è Ω(f(algoritmo è Ω(f(nn))))”” equivale a dire equivale a dire ““il tempo dil tempo d’’esecuzione esecuzione delldell’’algoritmo è >= a f(algoritmo è >= a f(nn)) ””..

ω (omega piccolo) ω (omega piccolo) equivale al simbolo >.equivale al simbolo >.““la complessità dellla complessità dell’’algoritmo è ω(f(algoritmo è ω(f(nn))))”” equivale a direequivale a dire““il tempo dil tempo d’’esecuzione esecuzione delldell’’algoritmo è strettamente > di f(algoritmo è strettamente > di f(nn))””

Page 10: Analisi della complessità degli algoritmi A. Ferrari

Complessità Complessità computazionalecomputazionale

La complessità computazionale di un La complessità computazionale di un algoritmo è la quantità di tempo algoritmo è la quantità di tempo necessaria per produrre il risultato finale.necessaria per produrre il risultato finale.

La complessità si esprime sotto forma di La complessità si esprime sotto forma di una funzione matematica che mette in una funzione matematica che mette in relazione il tempo di esecuzione di un relazione il tempo di esecuzione di un algoritmo con la dimensione dei dati di algoritmo con la dimensione dei dati di input.input.

Il caso peggiore per un algoritmo è il caso Il caso peggiore per un algoritmo è il caso in cui questo, per generare il risultato, in cui questo, per generare il risultato, impiega più tempo.impiega più tempo.

Page 11: Analisi della complessità degli algoritmi A. Ferrari

ComplessitàComplessitàIn molti casi la complessità è legata In molti casi la complessità è legata al tipo o al numero dei dati di inputal tipo o al numero dei dati di input

Ad esempio la ricerca di un valore in un Ad esempio la ricerca di un valore in un vettore ordinato dipende dalla vettore ordinato dipende dalla dimensione del vettoredimensione del vettore

La complessità può dipendere anche La complessità può dipendere anche dalla disposizione e dal tipo di datidalla disposizione e dal tipo di dati

Sempre nellSempre nell’’algoritmo di ricerca in un algoritmo di ricerca in un vettore ordinato avremo il caso:vettore ordinato avremo il caso:

OttimoOttimoPessimoPessimoMedioMedio

Page 12: Analisi della complessità degli algoritmi A. Ferrari

Tipi di Tipi di complessitàcomplessità

linearelineare

logaritmicalogaritmica

quadraticaquadratica

esponenzialeesponenziale

fattorialefattoriale

Page 13: Analisi della complessità degli algoritmi A. Ferrari

LineareLineare

ll’’algoritmo ha algoritmo ha complessità complessità O(O(nn))

Esempio:Esempio:algoritmo di algoritmo di ricerca ricerca sequenziale di sequenziale di un elemento in un elemento in un arrayun array

Page 14: Analisi della complessità degli algoritmi A. Ferrari

LogaritmicaLogaritmica

Esempio ricerca Esempio ricerca dicotomica in dicotomica in un arrayun array

La ricerca La ricerca dicotomica ha dicotomica ha complessità complessità O(logO(log22((nn))))

Page 15: Analisi della complessità degli algoritmi A. Ferrari

QuadraticaQuadratica

Un esempio è Un esempio è ll ’’algoritmo di algoritmo di ordinamento ordinamento bubblesort bubblesort eseguito su un eseguito su un array di elementiarray di elementi

ll’’algoritmo ha algoritmo ha complessità complessità O(O(nn22))

Page 16: Analisi della complessità degli algoritmi A. Ferrari

EsponenzialeEsponenzialell’’algoritmo della Torre di algoritmo della Torre di Hanoi ha complessità Ω(2Hanoi ha complessità Ω(2nn),),

La Torre di Hanoi è un La Torre di Hanoi è un rompicapo matematico rompicapo matematico composto da tre paletti e un composto da tre paletti e un certo numero di dischi di certo numero di dischi di grandezza decrescente, che grandezza decrescente, che possono essere infilati in possono essere infilati in uno qualsiasi dei paletti.uno qualsiasi dei paletti.

Il gioco inizia con tutti i Il gioco inizia con tutti i dischi incolonnati su un dischi incolonnati su un paletto in ordine paletto in ordine decrescente, in modo da decrescente, in modo da formare un cono.formare un cono.

Lo scopo è portare tutti Lo scopo è portare tutti dischi sulldischi sull’’ultimo paletto, ultimo paletto, potendo spostare solo un potendo spostare solo un disco alla volta e potendo disco alla volta e potendo mettere un disco solo su uno mettere un disco solo su uno più grande, mai su uno più più grande, mai su uno più piccolopiccolo

Page 17: Analisi della complessità degli algoritmi A. Ferrari

Torre di HanoiTorre di Hanoi

Page 18: Analisi della complessità degli algoritmi A. Ferrari

FattorialeFattoriale

EE ’’ quella che quella che cresce più cresce più velocemente velocemente rispetto a tutte le rispetto a tutte le precedenti.precedenti.

Esempio: algoritmo Esempio: algoritmo che calcola tutti gli che calcola tutti gli anagrammi di una anagrammi di una parola di parola di n n lettere lettere distinte.distinte.

la complessità di la complessità di un tale algoritmo è un tale algoritmo è Θ(Θ(nn!)!)

Page 19: Analisi della complessità degli algoritmi A. Ferrari

logaritmica < lineare < quadratica < esponenziale logaritmica < lineare < quadratica < esponenziale < fattoriale< fattoriale

Page 20: Analisi della complessità degli algoritmi A. Ferrari

ConfrontoConfronto