Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoGloria Parisi Modificato 9 anni fa
1
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - 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 © 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! 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 © 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
4
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 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 © 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 dall’esecuzione del programma! Notazione asintotica
6
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 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 © 2004 - 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 © 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)
9
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 ) 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 © 2004 - 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 © 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 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 © 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
13
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
14
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - 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 © 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
16
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl Algoritmo fibonacci6
17
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - 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 © 2004 - 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 © 2004 - 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)
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.