Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoNorina Franchini Modificato 10 anni fa
1
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione informale agli algoritmi Algoritmi e Strutture Dati
2
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 2 Approfondimento: Dimostrazione del Lemma 1 Lemma 1: Il numero di foglie dellalbero della ricorsione di fibonacci2(n) è pari a F n Dim: Per induzione su n: –Caso base n=1: in questo caso lalbero della ricorsione è costituito da un unico nodo, che è quindi anche una foglia; poiché F 1 =1, il lemma segue. –Caso n>1: supposto vero fino ad n-1, dimostriamolo vero per n; osserviamo che lalbero della ricorsione associato ad n è formato da una radice etichettata F(n) e da due sottoalberi etichettati F(n-1) e F(n-2). Per lipotesi induttiva, tali sottoalberi hanno rispettivamente F n-1 ed F n-2 foglie, e quindi lalbero della ricorsione associato ad n avrà F n-1 + F n-2 = F n foglie, come volevasi dimostrare.
3
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 3 Approfondimento: Dimostrazione del Lemma 2 Lemma 2: Il numero di nodi interni di un albero in cui ogni nodo interno ha esattamente due figli è pari al numero di foglie -1 Dim: Per induzione sul numero di nodi interni, sia detto k: –Caso base k=1: se cè un solo nodo interno, poiché per ipotesi deve avere due figli, tali figli saranno foglie, e quindi il lemma segue. –Caso k>1: supposto vero fino a k-1, dimostriamolo vero per k; osserviamo che poiché k>1, abbiamo due possibilità: 1.Uno dei due sottoalberi della radice è una foglia: in tal caso laltro sottoalbero contiene k-1 nodi interni, e quindi per ipotesi induttiva avrà k foglie; allora, il numero totale di foglie è k+1, da cui segue il lemma; 2.Entrambi i sottoalberi contengono nodi interni, in numero totale di k- 1=k 1 +k 2 ; ma allora, per ipotesi induttiva, conterranno rispettivamente k 1 +1 e k 2 +1 foglie, e quindi il numero totale di foglie è k 1 +k 2 +2=k+1, come volevasi dimostrare.
4
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 4 Stiamo cercando di calcolare efficientemente ln- esimo numero della sequenza di Fibonacci Abbiamo progettato 3 algoritmi: –fibonacci1, non corretto in quanto approssima la soluzione –Fibonacci2, che impiega tempo esponenziale in n –fibonacci3, che impiega tempo proporzionale ad n Punto della situazione
5
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - 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! È il caso di Fibonacci3, la cui correttezza è subordinata alla dimensione della memoria allocabile Occupazione di memoria
6
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - 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
7
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl Per la risorsa tempo, calcoliamo il numero di linee di codice T(n) mandate in esecuzione –Se n2: tre sole linee di codice –Se n 3: T(n) = 2+(n-1)+3·(n-2) = 4n-5 (per Fibonacci3 avevamo T(n)=2n) Per la risorsa spazio, contiamo il numero di variabili di lavoro utilizzate: S(n)=4 (per Fibonacci3 avevamo S(n)=n+1) [NOTA: stiamo assumendo che ogni locazione di memoria può contenere un valore infinitamente grande!) Correttezza? Corretto per definizione! Efficienza?
8
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - 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 dallesecuzione del programma! Notazione asintotica
9
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - 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 lordine di grandezza di T(n) ignorando dettagli inessenziali come le costanti moltiplicative, additive e sottrattive Useremo a questo scopo la notazione asintotica Θ Notazione asintotica
10
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl Supponiamo che Allora, scriveremo che f(n) = (g(n)). Notazione asintotica (definizione informale)
11
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - 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) Sia f(n) = 3 n -2 n, allora f(n)=Θ(3 n )
12
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl Fibonacci2 T(n)=3F n -2 T(n)=Θ(F n ) T(n)=Θ( n ), poiché Fibonacci3 T(n)=2n T(n)=Θ(n) Fibonacci4 T(n)= 4n-6 T(n)=Θ(n) Andamento asintotico per i Fibonacci
13
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl Possiamo sperare di calcolare F n in tempo inferiore a Θ(n)? Un nuovo algoritmo
14
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl fibonacci4 non è il miglior algoritmo possibile E possibile dimostrare per induzione la seguente proprietà di matrici: Potenze ricorsive 11 10 n = F n+1 F n FnFn F n-1 Useremo questa proprietà per progettare un algoritmo più efficiente
15
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - 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
16
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl Dimostrazione per induzione Base induzione: n=2 11 10 2 = F3F3 F2F2 F2F2 F1F1 11 10 11 10 = 21 11 = F n+1 FnFn FnFn F n-1 Hp induttiva: 11 10 n-1 = FnFn F n-1 F n-2 11 10 n = FnFn F n-1 F n-2 11 10 F n +F n-1 F n-1 + F n-2 = = FnFn F n-1
17
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmo fibonacci5 Osserva che il ciclo arriva fino ad n-1 Il tempo di esecuzione è T(n)=2+2(n-1)=Θ(n) Possiamo migliorare?
18
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - 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 =81 3 8 =(3 4 ) 2= (81) 2 =6561 Calcolo di potenze
19
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmo fibonacci6
20
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl Tutto il tempo è speso nella procedura potenzaDiMatrice –Allinterno della procedura si spende tempo costante –Si esegue una chiamata ricorsiva con input n/2 Lequazione di ricorrenza è pertanto: Tempo di esecuzione T(n) = Θ(1) + T(n/2)
21
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl Metodo delliterazione 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 !
22
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl Riepilogo fibonacci6 fibonacci5 fibonacci4 fibonacci3 fibonacci2 Θ(log n) Θ(n) Θ(log n) Θ(1) Θ(n) Numero di linee di codice Occupazione di memoria fibonacci1 Θ(1) Θ( n )
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.