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 Lanalisi della complessità di un algoritmo è basata sul concetto di passo elementare Bisogna stabilire un modello di calcolo di riferimento su cui è eseguito lalgoritmo 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 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 Complessità spaziale misurata come numero massimo di celle di memoria occupate durante lesecuzione Passi elementari: –istruzione ingresso/uscita (lettura o stampa) –operazione aritmetico/logica –accesso/modifica del contenuto della memoria 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 Algoritmo fibonacci5 Il tempo di esecuzione è O(n) –O(n) linee di codice eseguite –O(n) passi elementari eseguiti
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Criterio di costo logaritmico Il costo di una operazione dipende dalla dimensione degli operandi dellistruzione Una operazione su un operando di valore x ha costo log x È un criterio di costo che modella meglio il la complessità di algoritmi numerici useremo il criterio di costo uniforme (la natura dei problemi che studieremo lo consente) Copyright © The McGraw - Hill Companies, srl 5
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 6 Notazione asintotica
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 7 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 alcuni dettagli, 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 8 f(n) = O( g(n) ) se due costanti c>0 e n 0 0 tali che 0 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 9 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 10 Notazione asintotica O La scrittura: 2n 2 +4=O(n 3 ) è un abuso di notazine per: 2n 2 +4 O(n 3 ) O( g(n) )={f(n) | c>0 e n 0 0 tali che 0 f(n) c g(n) per ogni n n 0 }
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 due costanti c>0 e n 0 0 tali che f(n) c g(n) 0 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 13 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 14 Notazione asintotica La scrittura: 2n 2 +4= (n) è un abuso di notazine per: 2n 2 +4 (n) (g(n))={f(n) | c>0 e n 0 0 tali che 0 c g(n) f(n) per ogni n n 0 }
Copyright © The McGraw - Hill Companies, srl 15 Notare:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 16 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 17 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 18 Notazione asintotica La scrittura: 2n 2 +4= (n 2 ) è un abuso di notazine per: 2n 2 +4 (n 2 ) (g(n))={f(n) | c 1,c 2 >0 e n 0 0 tali che c 1 g(n) f(n) c 2 f(n) per ogni nn 0 }
Copyright © The McGraw - Hill Companies, srl 19 Notare che:
Copyright © The McGraw - Hill Companies, srl 20 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:
Copyright © The McGraw - Hill Companies, srl 21 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:
Copyright © The McGraw - Hill Companies, srl 22 Riassumendo ……
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 23 Analogie O >
Copyright © The McGraw - Hill Companies, srl 24 Proprietà della notazione asintotica Transitività Riflessività Simmetria Simmetria trasposta
Un insieme in una formula rappresenta unanonima funzione dellinsieme. Ancora una convenzione f(n)=n 3 + O(n 2 ) Esempio 1: sta per: cè una funzione h(n) O(n 2 ) tale che f(n)=n 3 + h(n) n 2 + O(n) = O(n 2 ) Esempio 2: sta per: per ogni funzione f(n) O(n), cè una funzione h(n) O(n 2 ) tale che n 2 +f(n)= h(n)
lim f(n)/g(n)= c >0 f(n)= (g(n)) c/2 < f(n)/g(n) < 2c n Se allora Infatti: per n suff. grande
Se T(n) = a d n d + a d-1 n d-1 + … + a 0 è un polinomio di grado d (con a d >0), allora T(n) = (n d ) Infatti: T(n) / n d = a d + a d-1 n -1 + … + a 0 n -d che tende a a d quando n : Esempio:
Copyright © The McGraw - Hill Companies, srl 28 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)] c = o(n d ) [log b (n)] c = 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 29 Metodi di analisi
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 30 Misureremo le risorse di calcolo usate da un algoritmo ( tempo di esecuzione / occupazione di memoria ) in funzione della dimensione n 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 31 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 Rappresenta una garanzia sul tempo di esecuzione di ogni istanza Caso peggiore
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 32 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 significa davvero qualcosa? (mah…) Caso migliore
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 33 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/assumere una distribuzione di probabilità sulle istanze Caso medio
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 34 Ricerca di un elemento x in un array/lista L non ordinata Esempio 1 T best (n) = 1 x è in prima posizione T worst (n) = n x L oppure è in ultima posizione T avg (n) = (n+1)/2 assumendo che x L e che si trovi con la stessa probabilità in una qualsiasi posizione algoritmo RicercaSequenziale(array L, elem x) -> booleano 1.n = lunghezza di L 2.i=1 3.for i=1 to n do 4. if (L[i]=x) then return true \\trovato 5.return false \\non trovato
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 35 Ricerca di un elemento x in un array L ordinato Esempio 2 (1/2) Confronta x con lelemento centrale di L e prosegue nella metà sinistra o destra in base allesito del confronto L[m] > x
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 36 Esempi su un array di 9 elementi Cerca 2 Cerca 1 Cerca 9 Cerca 3 3<4 quindi a e b si invertono
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 37 Esempio 2 (2/2) T best (n) = 1 lelemento centrale è uguale a x T worst (n) = log n x L oppure viene trovato allultimo confronto T avg (n) = log n -1+1/n assumendo che le istanze siano equidistribuite Poiché la dimensione del sotto-array su cui si procede si dimezza dopo ogni confronto, dopo li-esimo confronto il sottoarray di interesse ha dimensione n/2 i Risulta n/2 i = 1 per i=log 2 n
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 38 Delimitazioni inferiori e superiori
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 39 Delimitazioni superiori (upper bound) Definizione Un algoritmo A ha costo di esecuzione O(f(n)) su istanze di dimensione n e rispetto ad una certa risorsa di calcolo, se la quantità r di risorsa sufficiente per eseguire A su una qualunque istanza di dimensione n verifica la relazione r(n)=O(f(n)) Definizione Un problema P ha una complessità O(f(n)) rispetto ad una risorsa di calcolo se esiste un algoritmo che risolve P il cui costo di esecuzione rispetto quella risorsa è O(f(n))
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 40 Delimitazioni inferiori (lower bound) Definizione Un algoritmo A ha costo di esecuzione (f(n)) su istanze di dimensione n e rispetto ad una certa risorsa di calcolo, se la massima quantità r di risorsa necessaria per eseguire A su istanze di dimensione n verifica la relazione r(n)= (f(n)) Definizione Un problema P ha una complessità (f(n)) rispetto ad una risorsa di calcolo se ogni algoritmo che risolve P ha costo di esecuzione (f(n)) rispetto quella risorsa
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 41 Ottimalità di un algoritmo Definizione Dato un problema P con complessità (f(n)) rispetto ad una risorsa di calcolo, un algoritmo che risolve P è ottimo se ha costo di esecuzione O(f(n)) rispetto quella risorsa
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 42 Analisi di algoritmi ricorsivi
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 43 Lalgoritmo di ricerca binaria può essere scritto come algoritmo ricorsivo. Esempio Come analizzarlo? algoritmo RicercaBinariaRic(array L, elem x, int i, int j) -> booleano 1.if (i>j) then return non trovato 2.m= (i+j)/2 3.if (L[m]=x) then return trovato 4.if (L[m]>x) then return RicercaBinariaRic(L, x, i, m-1) 5. else return RicercaBinariaRic(L, x, m+1,j) gli indici i e j indicano la porzione di L in cui cercare lelemento x
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 44 Il tempo di esecuzione può essere descritto tramite una equazione di ricorrenza: Equazioni di ricorrenza c + T(n/2) se n>1 1 se n=1 T(n) = Vari metodi per risolvere equazioni di ricorrenza: iterazione, sostituzione, teorema Master...
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 45 Idea: srotolare la ricorsione, ottenendo una sommatoria dipendente solo dalla dimensione n del problema iniziale Metodo delliterazione Esempio: T(n) = c + T(n/2) T(n/2) = c + T(n/4)... T(n) = c + T(n/2) = 2c + T(n/4) = = ( j=1...i c ) + T(n/2 i ) = i c + T(n/2 i ) Per i=log 2 n: T(n) = c log n + T(1) = O(log n)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 46 Esercizi Risolvere usando il metodo delliterazione le seguenti equazioni di ricorrenza: T(n)= n + T(n-1), T(1)=1; T(n)= 9 T(n/3) + n (soluzione sul libro di testo: Esempio 2.4)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 47 Idea: 1. indovinare la (forma della) soluzione 2. usare induzione matematica per provare che la soluzione è quella intuita 3. risolvi rispetto alle costanti Metodo della sostituzione
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 48 Metodo della sostituzione Esempio: T(n) = n + T(n/2), T(1)=1 Assumiamo che la soluzione sia T(n) c n per una costante c opportuna Passo base: T(1)=1 c 1 per ogni c 1 Passo induttivo: T(n)= n + T(n/2) n+c (n/2) = (c/2+1) n Quindi T(n) c n per c2
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 49 Teorema Master Permette di analizzare algoritmi basati sulla tecnica del divide et impera: - dividi il problema (di dimensione n) in a sottoproblemi di dimensione n/b - risolvi i sottoproblemi ricorsivamente - ricombina le soluzioni Sia f(n) il tempo per dividere e ricombinare istanze di dimensione n. La relazione di ricorrenza è data da: a T(n/b) + f(n) se n>1 1 se n=1 T(n) =
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 50 Algoritmo fibonacci6 a=1, b=2, f(n)=O(1)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 51 Teorema Master n vs f(n) log b a quale va più velocemente a infinito? Stesso ordine asintotico T(n) = (f(n) log n) Se una delle due è polinomialmente più veloce T(n) ha lordine asintotico della più veloce
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 52 La relazione di ricorrenza: Teorema Master ha soluzione: a T(n/b) + f(n) se n>1 1 se n=1 T(n) = 1. T(n) = (n ) se f(n)=O(n ) per >0 log b a log b a - 2. T(n) = (n log n) se f(n) = (n ) log b a 3. T(n) = (f(n)) se f(n)= (n ) per >0 e a f(n/b) c f(n) per c<1 e n sufficientemente grande log b a +
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 53 1) T(n) = n + 2T(n/2) a=2, b=2, f(n)=n= (n ) T(n)= (n log n) (caso 2 del teorema master) Esempi log 2 2 2) T(n) = c + 3T(n/9) a=3, b=9, f(n)=c= (n ) T(n)= (n) (caso 1 del teorema master) log ) T(n) = n + 3T(n/9) a=3, b=9, f(n)=n= (n ) (caso 3 del teorema master) log T(n)= (n) 3(n/9) c n per c=1/3
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 54 4) T(n) = n log n + 2T(n/2) a=2, b=2, f(n) = (n ) ma f(n) (n ), > 0 Esempi log 2 2 log 2 2+ non si può applicare il teorema Master!
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 55 Esempio: T(n) = T( n) + O(1), T(1) = 1 Cambiamento di variabile T(n) = T(n 1/2 ) + O(1) n=2 x x =log 2 n T(2 x ) = T(2 x/2 ) + O(1) R(x):=T(2 x ) R(x) = R(x/2) + O(1) R(x) = O(log x) T(n) = O(log log n)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 56 Idea: –disegnare lalbero delle chiamate ricorsive indicando la dimensione di ogni nodo –studiare il tempo speso per tutte le chiamate di un dato livello dellalbero –studiare il numero di livelli dellalbero Esempio 1: T(n) = T(n/3) + T(2n/3) + n, T(1) = 1 Unaltra tecnica utile: Analisi dellalbero della ricorsione Esempio 2: T(n) = 2 T(n-1) + 1, T(1) = 1
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 57 Esercizio Progettare una versione ricorsiva dellalgoritmo di ricerca sequenziale, si fornisca lequazione di ricorrenza che descrive la sua complessità temporale e la si risolva con una delle tecniche studiate.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 58 Soluzione RicercaSeq (A, x) 1. return RicercaSeqRic(A,x,1) RicercaSeqRic(A, x, i) 1. if i > n then return non trovato 2. if A[i] = x then return trovato else return RicercaSeqRic(A,x,i+1) Complessità temporale dellalgoritmo: T(n) = c + T(n-1); T(1) = O(1) T(n) = c + T(n-1) = 2c + T(n -2)= 3c + T(n -3)= … = c(n -1) + T(1) = c(n -1) + O(1)= O(n) usando il metodo delliterazione