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 Riepilogo algoritmi Fibonacci* fibonacci6 fibonacci5 fibonacci4 fibonacci3 fibonacci2 Θ(log n) Θ(n) Θ(log n) Θ(1) Θ(n) Numero di linee di codice Occupazione di memoria fibonacci1 Θ(1) Θ( n )
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 3 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 (di dimensione infinita) 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 4 Macchina a registri
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 5 Criterio di costo uniforme Nel modello a costi uniformi, ogni istruzione ha un costo unitario Complessità temporale misurata come numero di istruzioni eseguite –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
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 6 Dimensione dellinput Misureremo le risorse di calcolo usate da un algoritmo (tempo di esecuzione / occupazione di memoria ) in funzione della dimensione dellistanza in input Esistono due modalità di caratterizzazione della dimensione dellinput: –Quantità di memoria effettiva utilizzata per codificare linput (ad esempio, numero di bit necessari per rappresentare un valore in input) –Parametro caratterizzante la dimensione dellinput (ad esempio, numero di elementi di una sequenza da ordinare)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 7 Domanda di approfondimento Qual è la complessità temporale degli algoritmi Fibonacci6, Fibonacci4 e Fibonacci2 in funzione della rappresentazione dellinput? Abbiamo appena affermato che la complessità temporale viene misurata in funzione della dimensione dellinput; nel caso dei tre algoritmi in questione, linput è un numero n, che può essere rappresentato usando k=log n bit. Quindi: –Fibonacci6 costa T(n)=Θ(log n)=Θ(k), ed è quindi polinomiale (più precisamente, lineare) nella dimensione dellinput; –Fibonacci4 costa T(n)=Θ(n)=Θ(2 k ), ed è quindi esponenziale nella dimensione dellinput; –Fibonacci2 costa T(n)=Θ( n )=Θ( 2 k ), ed è quindi superesponenziale nella dimensione dellinput.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 8 Notazione asintotica
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 9 Complessità temporale e spaziale saranno espresse in notazione asintotica rispetto alla dimensione dellinput La notazione asintotica è unastrazione utile per descrivere lordine di grandezza di una funzione ignorando i dettagli non influenti, come costanti moltiplicative e termini di ordine inferiore Ai fini dellanalisi asintotica, sarà sufficiente considerare le cosiddette operazioni dominanti, ovvero quelle che nel caso peggiore vengono eseguite più spesso Queste si trovano annidate nei cicli più interni dello pseudocodice che descrive lalgoritmo Notazione asintotica e operazioni dominanti
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 10 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 Un caso notevole: i polinomi Sia f(n) = a d n d + a d-1 n d-1 + … + a 0 un polinomio di grado d (con a d >0); dimostriamo che f(n)=O(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 = a d + |a d-1 | + … + |a 0 | c n d = a d n d + |a d-1 | n d +…+ |a 0 | n d a d n d + |a d-1 | n d-1 +…+ |a 0 | a d n d + a d-1 n d-1 + … + a 0 n n 0 f(n) c n d Copyright © The McGraw - Hill Companies, srl 11
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 12 Esempi Sia f(n) = 2n 2 + 3n; vogliamo dimostrare che f(n)=O(n 2 ). f(n)/n 2 = (2n 2 + 3n)/n 2 = 2 + 3/n ma 2 + 3/n > 0 per n 1 (quindi n 0 =1); Scegliendo c = a 2 + |a 1 | + |a 0 | = 2+3=5 avremo che 2n 2 + 3n 5n 2 per n n 0 =1. f(n) = O(n 3 ) (c=1, n 0 =3) f(n) = O(2 n ) (c=4, n 0 =3) Invece, f(n) O(n)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 13 Legame con il concetto di limite
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 14 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 Un caso notevole: i polinomi Sia f(n) = a d n d + a d-1 n d-1 + … + a 0 un polinomio di grado d (con a d >0); dimostriamo che 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 = a d - |a d-1 | n … - |a 0 | n 0 -d c n d = a d n d -|a d-1 | n d n …- |a 0 | n d n 0 -d e poiché per n n 0 si ha n d n 0 -k n d-k c n d a d n d - |a d-1 | n d-1 -…- |a 0 | a d n d + a d-1 n d-1 + … + a 0 n n 0 c n d f(n) Copyright © The McGraw - Hill Companies, srl 15
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 16 Esempi Sia f(n) = 2n 2 - 5n; vogliamo dimostrare che f(n)= (n 2 ). f(n)/n 2 = (2n 2 - 5n)/n 2 = 2 - 5/n ma 2 - 5/n > 0 per n 3 (quindi n 0 =3); Scegliendo c = a 2 - |a 1 |/n 0 - |a 0 |/n 0 2 = 2-3/3=1 avremo che 2n 2 - 3n 1n 2 per n n 0 =3. f(n) = (n) (c=1, n 0 =2) f(n) = (log n) (c=1, n 0 =2) Invece, f(n) (n 3 )
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 17 Legame con il concetto di limite
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 18 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 Relazioni tra O, e Θ Copyright © The McGraw - Hill Companies, srl 19
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 20 Notazione o Data una funzione g(n): N R, si denota con o(g(n)) linsieme 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 21 Notazione ω Data una funzione g(n): N R, si denota con ω(g(n)) linsieme delle funzioni f(n): N R: ω(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 22 Riassumendo …
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 23 Analogie O >
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Graficamente Copyright © The McGraw - Hill Companies, srl 24
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 25 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 26 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) = O(n d ), P(n) = (n d ) P(n) = (n d ) P(n) = O(n k ), kd, P(n) O(n k ), k<d P(n) = (n k ), kd, P(n) (n k ), k>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 ) Relazioni asintotiche notevoli
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 27 Metodi di analisi
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 28 Come detto, misureremo le risorse di calcolo usate da un algoritmo in funzione della dimensione delle istanze Ma istanze diverse, a parità di dimensione, potrebbero richiedere risorse diverse! Ad esempio, se devo cercare un elemento x in un insieme di n elementi in input, il numero di confronti che farò dipenderà dalla posizione che x occupa nella sequenza. 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 29 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 30 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 31 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 32 Denoteremo con T(n) il tempo di esecuzione dellalgoritmo su una generica istanza di ingresso di dimensione n. Varrà quindi: T(n) T worst (n) T(n) T best (n) Analogamente, per loccupazione di memoria: S(n) S worst (n) S(n) S best (n) Complessità temporale e spaziale di un algoritmo
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 33 Delimitazioni inferiori e superiori
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 34 Delimitazioni superiori (upper bound) Definizione (complessità di un algoritmo) Un algoritmo A ha costo di esecuzione O(g(n)) su istanze di dimensione n e rispetto ad una certa risorsa di calcolo (spazio o tempo), se la quantità f(n) di risorsa sufficiente per eseguire A su qualunque istanza di dimensione n (e quindi in particolare anche nel caso peggiore) verifica la relazione f(n)=O(g(n)). Definizione Un problema P ha una delimitazione superiore alla complessità O(g(n)) rispetto ad una certa risorsa di calcolo (spazio o tempo) 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 35 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 (spazio o tempo), 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 worst (n)= (g(n)). Definizione (complessità intrinseca di un problema) Un problema P ha una delimitazione inferiore alla complessità (g(n)) rispetto ad una certa risorsa di calcolo (spazio o tempo) 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 36 Ottimalità di un algoritmo Definizione Dato un problema P con complessità intrinseca (g(n)) rispetto ad una certa risorsa di calcolo (spazio o tempo), 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 37 Esercizio di 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 U appartenga o meno al mazzo. Progettare un algoritmo per risolvere tale problema, e analizzarne il costo (in termine di numero di confronti) nel caso migliore, peggiore e medio.