Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Modello di calcolo • L’analisi della complessità di un algoritmo è basata sul concetto di passo elementare • Bisogna stabilire un modello di calcolo di riferimento su cui è eseguito l’algoritmo • 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 è un’astrazione dell’architettura di von Neumann 2 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano 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 l’esecuzione • 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 3 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmo fibonacci5 • Il tempo di esecuzione è O(n) – O(n) linee di codice eseguite – O(n) passi elementari eseguiti 4 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Criterio di costo logaritmico • Il costo di una operazione dipende dalla dimensione degli operandi dell’istruzione • 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) 5 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Notazione asintotica 6 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Notazione asintotica • f(n) = tempo di esecuzione / occupazione di memoria di un algoritmo su input di dimensione n • La notazione asintotica è un’astrazione utile per descrivere l’ordine di grandezza di f(n) ignorando alcuni dettagli, come costanti moltiplicative e termini di ordine inferiore 7 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Notazione asintotica O f(n) = O( g(n) ) se due costanti c>0 e n0≥0 tali che 0f(n) ≤ c g(n) per ogni n ≥ n0 f(n) = ( g(n) ) cg(n) f(n) n0 8 n Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempi: Sia f(n) = 2n2 + 3n, allora • f(n)=O(n3) (c=1, n0=3) • f(n)=O(n2) (c=3, n0=3) • f(n) O(n) 9 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Notazione asintotica O O( g(n) )={f(n) | c>0 e n0≥0 tali che 0 f(n) ≤ c g(n) per ogni n ≥ n0} • La scrittura: 2n2+4=O(n3) • è un abuso di notazine per: 2n2+4 O(n3) 10 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Notare: limn fn 0 gn fn Ogn fn Ogn limn fn 0 gn fn Ogn limn fn gn 11 (se esiste) Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Notazione asintotica W f(n) = W( g(n) ) se due costanti c>0 e n0≥0 tali che f(n) ≥ c g(n) ≥ 0 per ogni n ≥ n0 f(n) = W(g(n)) f(n) c g(n) n0 12 n Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempi: Sia f(n) = 2n2 – 3n, allora • f(n)= W(n) (c=1, n0=2) • f(n)=W(n2) (c=1, n0=3) • f(n) W(n3) 13 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Notazione asintotica W W(g(n))={f(n) | c>0 e n0≥0 tali che 0 c g(n) ≤ f(n) per ogni n ≥ n0} • La scrittura: 2n2+4= W(n) • è un abuso di notazine per: 2n2+4 W(n) 14 Copyright © 2004 - The McGraw - Hill Companies, srl Notare: limn fn gn fn Wgn fn Wgn limn fn gn fn Wgn limn fn gn 15 (se esiste) 0 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Notazione asintotica Q f(n) = Q( g(n) ) se tre costanti c1,c2>0 e n0≥0 tali che c1 g(n) ≤ f(n) ≤ c2 g(n) per ogni n ≥ n0 f(n) = Q(g(n)) c2 g(n) f(n) c1 g(n) n0 16 n Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempi: Sia f(n) = 2n2 – 3n, allora • f(n)= Q(n2) (c1=1, c2=2, n0=3) • f(n) Q(n) • f(n) Q(n3) 17 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Notazione asintotica Q Q(g(n))={f(n) | c1,c2>0 e n0≥0 tali che c1 g(n) ≤ f(n) c2 f(n) per ogni n≥n0} • La scrittura: 2n2+4= Q(n2) • è un abuso di notazine per: 2n2+4 Q(n2) 18 Copyright © 2004 - The McGraw - Hill Companies, srl Notare che: fn Qg(n) fn Ogn fn Og(n) fn Θgn fn Qg(n) fn Wgn fn Wg(n) fn Qgn fn Qg(n) 19 fn Ωgn e fn Ogn Copyright © 2004 - The McGraw - Hill Companies, srl 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, n0 tale che n n0 0 f(n) < c g(n) } Notare: ogn fn ogn 20 Ogn limn fn 0 gn Copyright © 2004 - The McGraw - Hill Companies, srl 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, n0 tale che n n0 0 c g(n) < f(n) } Notare: gn fn gn 21 Wgn limn fn gn Copyright © 2004 - The McGraw - Hill Companies, srl Riassumendo …… fn Θgn fn Ogn fn Wgn fn 0 c1 c2 gn fn c2 gn 0 c1 fn gn asintotica mente asintotica mente fn ogn limn fn 0 gn fn gn limn fn gn 22 asintotica mente Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Analogie 23 O W Q o > Copyright © 2004 - The McGraw - Hill Companies, srl Proprietà della notazione asintotica Transitività fn Qgn fn Ogn fn Wgn e e e gn Qhn gn Ohn gn Whn fn Qhn fn Ohn fn Whn fn ogn e gn ohn fn ohn fn gn e gn hn fn hn Riflessività fn Qfn fn Οfn fn Wfn Simmetria fn Qgn Simmetria trasposta gn Qfn fn Ogn gn Wfn fn ogn gn fn 24 Copyright © 2004 - The McGraw - Hill Companies, srl Ancora una convenzione Un insieme in una formula rappresenta un’anonima funzione dell’insieme. Esempio 1: f(n)=n3 + O(n2) sta per: c’è una funzione h(n) O(n2) tale che f(n)=n3 + h(n) Esempio 2: n2 + O(n) = O(n2) sta per: per ogni funzione f(n)O(n), c’è una funzione h(n) O(n2) tale che n2 +f(n)= h(n) Se limnf(n)/g(n)= c >0 allora f(n)=Q(g(n)) Infatti: c/2 < f(n)/g(n) < 2c per n suff. grande Esempio: Se T(n) = ad nd + ad-1 nd-1 + … + a0 è un polinomio di grado d (con ad>0), allora T(n) = Q(nd) Infatti: T(n) / nd = ad + ad-1 n-1 + … + a0 n-d che tende a ad quando n : Polinomi …… nd P(n) = ad + ad-1 ad > 0 Esponenziali …… nd-1 + … + a0 f(n) = an a >1 an = (nd) an = W(nd) an limn d n Logaritmi …… f(n) = logb(n) b>1 limn Fattoriali …… logb n c nd f(n) = n! = n*(n-1)*……*2*1 28 P(n) = Q(nd) P(n) = O(nd) P(n) = W(nd) [logb(n)]c = o(nd) [logb(n)]c = O(nd) 0, c, d 0 n! = o(nn) n! = (an) Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Metodi di analisi 29 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Caso peggiore, migliore e medio • 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 30 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Caso peggiore • Sia tempo(I) il tempo di esecuzione di un algoritmo sull’istanza I Tworst(n) = max istanze I di dimensione n {tempo(I)} • Intuitivamente, Tworst(n) è il tempo di esecuzione sulle istanze di ingresso che comportano più lavoro per l’algoritmo • Rappresenta una garanzia sul tempo di esecuzione di ogni istanza 31 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Caso migliore • Sia tempo(I) il tempo di esecuzione di un algoritmo sull’istanza I Tbest(n) = min istanze I di dimensione n {tempo(I)} • Intuitivamente, Tbest(n) è il tempo di esecuzione sulle istanze di ingresso che comportano meno lavoro per l’algoritmo • significa davvero qualcosa? (mah…) 32 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Caso medio • Sia P(I) la probabilità di occorrenza dell’istanza I Tavg(n) = ∑ istanze I di dimensione n {P(I) tempo(I) } • Intuitivamente, Tavg(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 33 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempio 1 Ricerca di un elemento x in un array/lista L non ordinata 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 Tbest(n) = 1 Tworst(n) = n Tavg(n) = (n+1)/2 34 x è in prima posizione x L oppure è in ultima posizione assumendo che x L e che si trovi con la stessa probabilità in una qualsiasi posizione Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempio 2 (1/2) Ricerca di un elemento x in un array L ordinato L[m] > x Confronta x con l’elemento centrale di L e prosegue nella metà sinistra o destra in base all’esito del confronto 35 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempi su un array di 9 elementi Cerca 2 Cerca 1 Cerca 9 Cerca 3 3<4 quindi a e b si invertono 36 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempio 2 (2/2) Tbest(n) = 1 l’elemento centrale è uguale a x Tworst(n) = log n x L oppure viene trovato all’ultimo confronto Poiché la dimensione del sotto-array su cui si procede si dimezza dopo ogni confronto, dopo l’i-esimo confronto il sottoarray di interesse ha dimensione n/2i Risulta n/2i = 1 per i=log2n Tavg(n) = log n -1+1/n assumendo che le istanze siano equidistribuite 37 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Delimitazioni inferiori e superiori 38 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano 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)) 39 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Delimitazioni inferiori (lower bound) Definizione Un algoritmo A ha costo di esecuzione W(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)= W(f(n)) Definizione Un problema P ha una complessità W(f(n)) rispetto ad una risorsa di calcolo se ogni algoritmo che risolve P ha costo di esecuzione W(f(n)) rispetto quella risorsa 40 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Ottimalità di un algoritmo Definizione Dato un problema P con complessità W(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 41 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Analisi di algoritmi ricorsivi 42 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempio L’algoritmo di ricerca binaria può essere scritto come algoritmo ricorsivo. gli indici i e j indicano la porzione di L in cui cercare l’elemento x 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) Come analizzarlo? 43 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Equazioni di ricorrenza Il tempo di esecuzione può essere descritto tramite una equazione di ricorrenza: T(n) = c + T(n/2) 1 se n>1 se n=1 Vari metodi per risolvere equazioni di ricorrenza: iterazione, sostituzione, teorema Master... 44 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Metodo dell’iterazione Idea: “srotolare” la ricorsione, ottenendo una sommatoria dipendente solo dalla dimensione n del problema iniziale 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/2i) = i c + T(n/2i) Per i=log2n: T(n) = c log n + T(1) = O(log n) 45 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esercizi Risolvere usando il metodo dell’iterazione 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) 46 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Metodo della sostituzione Idea: 1. indovinare la (forma della) soluzione 2. usare induzione matematica per provare che la soluzione è quella intuita 3. risolvi rispetto alle costanti 47 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano 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≤ c1 per ogni c1 Passo induttivo: T(n)= n + T(n/2) ≤ n+c (n/2) = (c/2+1)n Quindi T(n) ≤ c n per c≥2 48 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano 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: T(n) = 49 a T(n/b) + f(n) se n>1 1 se n=1 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmo fibonacci6 a=1, b=2, f(n)=O(1) 50 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Teorema Master n logba vs f(n) quale va più velocemente a infinito? Stesso ordine asintotico T(n) = Q(f(n) log n) Se una delle due è “polinomialmente” più veloce T(n) ha l’ordine asintotico della più veloce 51 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Teorema Master La relazione di ricorrenza: T(n) = a T(n/b) + f(n) se n>1 1 se n=1 ha soluzione: 1. T(n) = Q(n logba ) se f(n)=O(n logba- e ) per e>0 2. T(n) = Q(n logba log n) se f(n) = Q(n logba ) 3. T(n) = Q(f(n)) se f(n)=W(n logba+ e) per e>0 e a f(n/b)≤ c f(n) per c<1 e n sufficientemente grande 52 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempi 1) T(n) = n + 2T(n/2) a=2, b=2, f(n)=n=Q(n log22 ) (caso 2 del teorema master) T(n)=Q(n log n) 2) T(n) = c + 3T(n/9) a=3, b=9, f(n)=c=(n log93 - e ) (caso 1 del teorema master) T(n)=Q(√n) 3) T(n) = n + 3T(n/9) a=3, b=9, f(n)=n=W(n log93 + e) 3(n/9)≤ c n per c=1/3 (caso 3 del teorema master) 53 T(n)=Q(n) Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esempi 4) T(n) = n log n + 2T(n/2) a=2, b=2, f(n) = (n log22) ma f(n)W(n log22+e), e > 0 non si può applicare il teorema Master! 54 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Cambiamento di variabile Esempio: T(n) = T(n) + O(1), T(1) = 1 T(n) = T(n1/2) + O(1) n=2x x =log2 n T(2x) = T(2x/2) + O(1) R(x):=T(2x) R(x) = R(x/2) + O(1) R(x) = O(log x) T(n) = O(log log n) 55 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Un’altra tecnica utile: Analisi dell’albero della ricorsione Idea: – disegnare l’albero delle chiamate ricorsive indicando la dimensione di ogni nodo – studiare il tempo speso per tutte le chiamate di un dato livello dell’albero – studiare il numero di livelli dell’albero Esempio 1: T(n) = T(n/3) + T(2n/3) + n, T(1) = 1 Esempio 2: T(n) = 2 T(n-1) + 1, T(1) = 1 56 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Esercizio Progettare una versione ricorsiva dell’algoritmo di ricerca sequenziale, si fornisca l’equazione di ricorrenza che descrive la sua complessità temporale e la si risolva con una delle tecniche studiate. 57 Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmi e strutture dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano RicercaSeq (A, x) 1. Soluzione 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 dell’algoritmo: T(n) = c + T(n-1); T(1) = O(1) usando il metodo dell’iterazione 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) 58 Copyright © 2004 - The McGraw - Hill Companies, srl