La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Un’introduzione.

Presentazioni simili


Presentazione sul tema: "Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Un’introduzione."— Transcript della presentazione:

1 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Capitolo 1 Un’introduzione informale agli algoritmi Algoritmi e Strutture Dati

2 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Il tempo di esecuzione non è la sola risorsa di calcolo che ci interessa. Anche la quantità di memoria necessaria può essere cruciale. Se abbiamo un algoritmo lento, dovremo solo attendere più a lungo per ottenere il risultato Ma se un algoritmo richiede più spazio di quello a disposizione, non otterremo mai la soluzione, indipendentemente da quanto attendiamo! E’ il caso di Fibonacci3, la cui correttezza è subordinata alla dimensione della memoria allocabile Θccupazione di memoria

3 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl fibonacci3 usa un array di dimensione n prefissata In realtà non ci serve mantenere tutti i valori di F n precedenti, ma solo gli ultimi due, riducendo lo spazio a poche variabili in tutto: Algoritmo fibonacci4 algoritmo fibonacci4 (intero n)  intero a  b  1 for i = 3 to n do c  a+b a  b b  c return b

4 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Per la risorsa tempo, calcoliamo il numero di linee di codice T(n) mandate in esecuzione –Se n≤2: tre sole linee di codice –Se n  3: T(n) = 2+4·(n-2) = 4n-6 (per Fibonacci3 T(n)=2n) Per la risorsa spazio, contiamo il numero di variabili di lavoro utilizzate: S(n)=4 (per Fibonacci3 S(n)=n+1) Correttezza? Corretto per ogni valore di n! Efficienza?

5 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Misurare T(n) come il numero di linee di codice mandate in esecuzione è una misura molto approssimativa del tempo di esecuzione Se andiamo a capo più spesso, aumenteranno le linee di codice sorgente, ma certo non il tempo richiesto dall’esecuzione del programma! Notazione asintotica

6 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Per lo stesso programma impaginato diversamente potremmo concludere ad esempio che T(n)=3n oppure T(n)=5n Vorremmo un modo per descrivere l’ordine di grandezza di T(n) ignorando dettagli inessenziali come le costanti moltiplicative, additive e sottrattive Useremo a questo scopo la notazione asintotica Θ Notazione asintotica

7 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 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)

8 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Esempi: Sia f(n) = 2n 2 + 3n, allora f(n)=Θ(n 2 ) Sia f(n) = n 3 -2n 2 +3n, allora f(n)=Θ(n 3 ) Sia f(n) = 23, allora f(n)=Θ(1)

9 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Fibonacci2 T(n)=3F n -2  T(n)=Θ(F n )  T(n)=Θ(  n ) Fibonacci3 T(n)=2n  T(n)=Θ(n) Fibonacci4 T(n)= 4n-6  T(n)=Θ(n) Andamento asintotico per i Fibonacci

10 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Possiamo sperare di calcolare F n in tempo inferiore a Θ(n)? Un nuovo algoritmo

11 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl fibonacci4 non è il miglior algoritmo possibile E’ possibile dimostrare per induzione la seguente proprietà di matrici: Potenze ricorsive n = F n+1 FnFn FnFn F n-1 Useremo questa proprietà per progettare un algoritmo più efficiente

12 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl …prodotto di matrici (AB) i,j =  a i,k b k,j k=1 n i=1,…, n j=1,…, n

13 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Dimostrazione per induzione Base induzione: n= = F3F3 F2F2 F2F2 F1F  = = F n+1 FnFn FnFn F n-1 Hp induttiva: n-1 = FnFn F n-1 F n n = FnFn F n-1 F n  F n +F n-1 F n-1 + F n-2 = = FnFn F n-1  

14 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Algoritmo fibonacci5 Il tempo di esecuzione è T(n)=2+2(n-1)=Θ(n) Possiamo migliorare?

15 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Possiamo calcolare la n-esima potenza elevando al quadrato la ( └ n/2 ┘ )-esima potenza Se n è dispari eseguiamo una ulteriore moltiplicazione Esempio: 3 2 =9 3 4 =(3 2 ) 2= (9) 2 = =(3 4 ) 2= (81) 2 =6561 Calcolo di potenze

16 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Algoritmo fibonacci6

17 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Tutto il tempo è speso nella procedura potenzaDiMatrice –All’interno della procedura si spende tempo costante –Si esegue una chiamata ricorsiva con input n/2 L’equazione di ricorrenza è pertanto: Tempo di esecuzione T(n) = Θ(1) + T(n/2)

18 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Metodo dell’iterazione Si può dimostrare che T(n) ≤ c log 2 n + T(1) = Θ(log 2 n ) Infatti: T(n)=T(n/2)+Θ(1)=[T(n/4)+Θ(1)]+Θ(1)= =[{T(n/8)+Θ(1)}+Θ(1)] +Θ(1)=… =((…(T(1)+Θ(1))+…+Θ(1))+Θ(1))+Θ(1)=Θ(log n) fibonacci6 è quindi esponenzialmente più veloce di fibonacci5 !

19 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Riepilogo fibonacci6 fibonacci5 fibonacci4 fibonacci3 fibonacci2 Θ(log n) Θ(n) Θ(  n ) Θ(log n) Θ(1) Θ(n) Tempo di esecuzione Occupazione di memoria fibonacci1 Θ(1)


Scaricare ppt "Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Un’introduzione."

Presentazioni simili


Annunci Google