Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 2 Modello di calcolo Per valutare la complessità di un algoritmo, bisogna prima di tutto stabilire un modello di calcolo di riferimento su cui esso viene eseguito Macchina a registri (RAM: random access machine) –un programma finito –un nastro di ingresso e uno di uscita –una memoria strutturata come un array ogni cella può contenere un qualunque valore intero/reale –un registro detto accumulatore (contiene operandi istruzione corrente) –un registro detto contatore delle istruzioni (contiene indirizzo istruzione successiva) la RAM è unastrazione dellarchitettura di von Neumann
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 3 Criterio di costo uniforme Complessità temporale misurata come numero di passi elementari eseguiti Passi elementari sulla RAM: –istruzione ingresso/uscita (lettura o stampa) –operazione aritmetico/logica –accesso/modifica del contenuto della memoria Complessità spaziale misurata come numero massimo di celle di memoria della RAM occupate durante lesecuzione Complessità temporale e spaziale espresse in notazione asintotica
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 4 Notazione asintotica
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 5 f(n) = tempo di esecuzione / occupazione di memoria di un algoritmo su input di dimensione n La notazione asintotica è unastrazione utile per descrivere lordine di grandezza di f(n) ignorando i dettagli non influenti, come costanti moltiplicative e termini di ordine inferiore Notazione asintotica
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 6 f(n) = O(g(n) ) se due costanti c>0 e n 0 0 tali che f(n) c g(n) per ogni n n 0 Notazione asintotica O
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 7 Esempi: Sia f(n) = 2n 2 + 3n, allora f(n)=O(n 3 ) (c=1, n 0 =3) f(n)=O(n 2 ) (c=3, n 0 =3) f(n) O(n)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 8 Notare:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 9 f(n) = ( g(n) ) se due costanti c>0 e n 0 0 tali che f(n) c g(n) per ogni n n 0 Notazione asintotica n0n0 n f(n) = ( g(n) ) f(n) c g(n)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 10 Esempi: Sia f(n) = 2n 2 – 3n, allora f(n)= (n) (c=1, n 0 =2) f(n)= (n 2 ) (c=1, n 0 =3) f(n) (n 3 )
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 11 Notare:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 12 f(n) = ( g(n) ) se tre costanti c 1,c 2 >0 e n 0 0 tali che c 1 g(n) f(n) c 2 g(n) per ogni n n 0 Notazione asintotica n0n0 n f(n) = ( g(n) ) f(n) c 1 g(n) c 2 g(n)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 13 Esempi: Sia f(n) = 2n 2 – 3n, allora f(n)= (n 2 ) (c 1 =1, c 2 =2, n 0 =3) f(n) (n) f(n) (n 3 )
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 14 Notare che:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 15 Notazione o Data una funzione g(n): N R, si denota con o(g(n)) l insieme delle funzioni f(n): N R: o(g(n)) = {f(n) : c > 0, n 0 tale che n n 0 0 f(n) c g(n) } Notare:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 16 Notazione Data una funzione g(n): N R, si denota con (g(n)) l insieme delle funzioni f(n): (g(n)) = {f(n) : c > 0, n 0 tale che n n 0 0 c g(n) f(n) } Notare:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 17 Riassumendo ……
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 18 Se f(n) = a d n d + a d-1 n d-1 + … + a 0 è un polinomio di grado d (con a d >0), allora f(n) = (n d ) Infatti: f(n) / n d = a d + a d-1 n -1 + … + a 0 n -d n 0 : n n 0 a d - |a d-1 |n -1 - … - |a 0 | n -d > 0 Se scegliamo: c 1 = a d - |a d-1 | n … - |a 0 | n 0 -d c 2 = a d + |a d-1 | + … + |a 0 | n n 0 c 1 n d f(n) c 2 n d Esempio:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 19 Logaritmi …… Esponenziali …… Polinomi …… Fattoriali …… P(n) = a d n d + a d-1 n d-1 + … + a 0 a d > 0 f(n) = a n a >1 P(n) = (n d ) P(n) = O(n d ) P(n) = (n d ) a n = (n d ) f(n) = log b (n) b>1 log b (n) = o(n d ) log b (n) = O(n d ) f(n) = n! = n*(n-1)*……*2*1 n! = o(n n ) n! = (a n )
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 20 Proprietà della notazione asintotica Transitività Riflessività Simmetria Simmetria trasposta
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 21 Metodi di analisi
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 22 Misureremo le risorse di calcolo usate da un algoritmo ( tempo di esecuzione / occupazione di memoria ) in funzione della dimensione delle istanze Istanze diverse, a parità di dimensione, potrebbero però richiedere risorse diverse Distinguiamo quindi ulteriormente tra analisi nel caso peggiore, migliore e medio Caso peggiore, migliore e medio
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 23 Sia tempo(I) il tempo di esecuzione di un algoritmo sullistanza I T worst (n) = max istanze I di dimensione n {tempo(I)} Intuitivamente, T worst (n) è il tempo di esecuzione sulle istanze di ingresso che comportano più lavoro per lalgoritmo Definizione analoga può essere data per lo spazio Caso peggiore
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 24 Sia tempo(I) il tempo di esecuzione di un algoritmo sullistanza I T best (n) = min istanze I di dimensione n {tempo(I)} Intuitivamente, T best (n) è il tempo di esecuzione sulle istanze di ingresso che comportano meno lavoro per lalgoritmo Caso migliore
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 25 Sia P (I) la probabilità di occorrenza del- listanza I T avg (n) = istanze I di dimensione n { P (I) tempo(I) } Intuitivamente, T avg (n) è il tempo di esecuzione nel caso medio, ovvero sulle istanze di ingresso tipiche per il problema Richiede di conoscere una distribuzione di probabilità sulle istanze Caso medio
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 26 Delimitazioni inferiori e superiori
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 27 Delimitazioni superiori (upper bound) Definizione Un algoritmo A ha costo di esecuzione O(g(n)) su istanze di dimensione n e rispetto ad una certa risorsa di calcolo, se la quantità f(n) di risorsa sufficiente per eseguire A nel caso peggiore (e quindi sufficiente per una qualunque istanza di dimensione n) verifica la relazione f(n)=O(g(n)) Definizione Un problema P ha una complessità O(g(n)) rispetto ad una certa risorsa di calcolo se esiste un algoritmo che risolve P il cui costo di esecuzione rispetto a quella risorsa è O(g(n))
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 28 Delimitazioni inferiori (lower bound) Definizione Un algoritmo A ha costo di esecuzione (g(n)) su istanze di dimensione n e rispetto ad una certa risorsa di calcolo, se la quantità f(n) di risorsa necessaria per eseguire A nel caso peggiore (e quindi non è detto che debba essere necessaria per ogni istanza di dimensione n: istanze facili potrebbero richiedere meno risorse!) verifica la relazione f(n)= (g(n)) Definizione Un problema P ha una complessità (g(n)) rispetto ad una certa risorsa di calcolo se ogni algoritmo che risolve P ha costo di esecuzione (g(n)) rispetto a quella risorsa
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 29 Ottimalità di un algoritmo Definizione Dato un problema P con complessità (g(n)) rispetto ad una certa risorsa di calcolo, un algoritmo che risolve P è ottimo se ha costo di esecuzione O(g(n)) rispetto a quella risorsa
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 30 Approfondimento Sia dato un mazzo di n carte scelte in un universo U di 2n carte, e si supponga di dover verificare se una certa carta x in U appartenga o meno al mazzo. Qual è il costo di tale verifica (in termine di numero di confronti) nel caso migliore, peggiore e medio?