Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 -...

38
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli Studi dell’Aquila Anno Accademico 2011/2012 Corso Integrato di Algoritmi e Strutture Dati con Laboratorio • Modulo da 6 CFU di Algoritmi e Strutture Dati (Prof. Guido Proietti) • Modulo da 6 CFU di Laboratorio di ASD (Dott.ssa Giovanna Melideo) Orario: Lunedì: 14.30 – 16.30 (Aula 1.7) Mercoledì: 14.30 – 16.30 (Aula 1.7) • Ricevimento: Mercoledì 16.30-17.30

Transcript of Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 -...

Page 1: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl1

Università degli Studi dell’AquilaAnno Accademico 2011/2012

• Corso Integrato di Algoritmi e Strutture Dati con Laboratorio

• Modulo da 6 CFU di Algoritmi e Strutture Dati (Prof. Guido Proietti)

• Modulo da 6 CFU di Laboratorio di ASD (Dott.ssa Giovanna Melideo)

• Orario: Lunedì: 14.30 – 16.30 (Aula 1.7) Mercoledì: 14.30 – 16.30 (Aula 1.7)• Ricevimento: Mercoledì 16.30-17.30

Page 2: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl2

Programma settimanale1. Introduzione: problemi, algoritmi, complessità computazionale .2. Notazione asintotica, problema della ricerca.3. Ordinamento: Insertion sort, Selection sort. 4. Ordinamento efficiente: Merge sort, Quicksort, algoritmi di ordinamento

lineari. 5. Code di priorità: heap binario, Heapsort, heap binomiale.6. Alberi di ricerca: problema del dizionario.7. Alberi di ricerca: alberi AVL. 8. Prova intermedia (settimana 21-25 novembre 2011)9. Tabelle hash; tecniche algoritmiche. 10. Grafi: visite. 11. Cammini minimi: Ordinamento topologico, Bellman&Ford.12. Cammini minimi: Dijkstra, Floyd&Warshall.13. Insiemi disgiunti14. Minimo albero ricoprente: Kruskal, Prim, Boruvka.

Page 3: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl3

Libro di testo

C. Demetrescu, I. Finocchi, G. ItalianoAlgoritmi e Strutture dati

McGraw-Hill

Slide e materiale didattico

http://www.di.univaq.it/~proietti/didattica.html

Page 4: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl4

Altri testi utili

T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. SteinIntroduzione agli algoritmi e strutture datiMcGraw-Hill

P. Crescenzi, G. Gambosi, R. GrossiStrutture di dati e algoritmiAddison-Wesley

Page 5: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl5

Modalità d’esame• L’esame consiste in una prova scritta e una prova orale:

gli scritti/orali di teoria e laboratorio possono essere svolti disgiuntamente purché all’interno della stessa sessione

• Prove parziali (riservate agli studenti del secondo anno): il superamento delle prove parziali dà diritto a svolgere l’orale solo sulla seconda parte del programma

• Sei appelli (+1 a Novembre per i fuori corso)– 2 appelli a gennaio/febbraio– 2 appelli a giugno/luglio– 2 appelli a settembre

Page 6: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl6

Obiettivi del corsoFornire le competenze necessarie per:

– analizzare le principali tecniche di progettazione e analisi degli algoritmi

– identificare le scelte algoritmiche fondamentali e saperle valutare in termini di complessità computazionale

– scegliere e realizzare strutture dati adeguate al problema che si vuole risolvere

– sviluppare un’intuizione finalizzata alla soluzione di problemi computazionali

Page 7: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl7

Prerequisiti del corso

Cosa è necessario sapere…– strutture dati elementari – concetto di ricorsione– dimostrazione per induzione e calcolo

infinitesimale

Page 8: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Capitolo 1Un’introduzione informale

agli algoritmi

Algoritmi e Strutture Dati

Page 9: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl9

Etimologia

Il termine Algoritmo deriva da Algorismus, traslitterazione latina del nome di un matematico persiano del IX secolo, Muhammad al-Khwarizmi, che ne descrisse il concetto applicato alle procedure per eseguire alcuni calcoli matematici

Page 10: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl10

Procedimento effettivo che consente di risolvere un problema (ovvero di ottenere una risposta ad un determinato quesito) eseguendo, in un determinato ordine, un insieme finito di passi semplici (azioni), scelti tra un insieme (solitamente) finito di possibili azioni.

Definizione (necessariamente informale) di algoritmo

Page 11: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl11

Le quattro proprietà fondamentali di un algoritmo

• La sequenza di istruzioni deve essere finita

• Essa deve portare ad un risultato

• Le istruzioni devono essere eseguibili materialmente

• Le istruzioni non devono essere ambigue

Page 12: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl12

Algoritmi e strutture dati

• Concetto di algoritmo è inscindibile da quello di dato

• Da un punto di vista computazionale, un algoritmo è una procedura che prende dei dati in input e, dopo averli elaborati, restituisce dei dati in output

I dati devo essere organizzati e strutturati in modo tale che la procedura che li elabora sia “efficiente”

Page 13: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl13

• Un algoritmo è l’essenza computazionale di un programma, nel senso che fornisce il procedimento per giungere alla soluzione di un dato problema di calcolo

• Algoritmo ≠ Programma– Un algoritmo è una procedura risolutiva depurata da dettagli

riguardanti il linguaggio di programmazione, ambiente di sviluppo, sistema operativo

– Un programma è la codifica (in un linguaggio di programmazione) di un algoritmo

Algoritmi e programmi

Page 14: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl14

Problema: ricerca del massimo fra n numeri

• Input: una sequenza di n numeri A=<a1,a2,…,an>

• Output: un numero ai tale che ai aj j=1,…,n

Algoritmo (ad altissimo livello): Inizializza il valore del massimo al valore del primo elemento. Poi, guarda uno dopo l’altro tutti gli elementi, e ad ogni passo confronta l’elemento in esame con il massimo corrente, e se maggiore, aggiorna il massimo corrente

Page 15: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl15

int InC(int a[], int n){ int i, max; max = a[0]; for (i = 1; i < n; i++) if (a[i] > max) { max = a[i]; } return max;}

public static int InJava (int[] a){int max=a[0];for (int i = 1; i < a.length; i++) if (a[i] > max) max = a[i];return max;

function InPascal(var A: array[1…Nmax] of integer): integer; var k, max: integer;begin max:=A[1]; for k:= 2 to n do begin if A[k]>max then max:=A[k]; end; InPascal:=max;end;

Alcune codifiche classiche…

Page 16: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl16

Il nostro pseudo-codice

Input: Sequenza di n numeri: <a1,a2,…, an>Output: valore massimo della sequenza

Massimo (A) max= a1 for j=2 to n do if (aj max) then max=aj

return max

Page 17: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl17

Correttezza ed efficienza

Vogliamo progettare algoritmi che:– Producano correttamente il risultato

desiderato

– Siano efficienti in termini di tempo di esecuzione ed occupazione di memoria

Page 18: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl18

Analisi di algoritmi Correttezza:

– dimostrare formalmente che un algoritmo è corretto

Complessità:– Stimare la quantità di risorse (tempo e

memoria) necessarie all’algoritmo– stimare il più grande input gestibile in tempi

ragionevoli– confrontare due algoritmi diversi– ottimizzare le parti “critiche”

Page 19: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl19

Un esempio giocattolo:

i numeri di Fibonacci

Page 20: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl20

Leonardo da Pisa (anche noto come Fibonacci) si interessò di molte cose, tra cui il seguente problema di dinamica delle popolazioni:

L’isola dei conigli

Quanto velocemente si espanderebbe una popolazione di conigli sotto appropriate condizioni?

In particolare, partendo da una coppia di conigli in un’isola deserta, e data una certa regola di riproduzione, quante coppie si avrebbero nell’anno n?

Page 21: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl21

• Una coppia di conigli concepisce due coniglietti di sesso diverso ogni anno, i quali formeranno una nuova coppia

• La gestazione dura un anno

• I conigli cominciano a riprodursi soltanto al secondo anno dopo la loro nascita

• I conigli sono immortali

Le regole di riproduzione

Page 22: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl22

L’albero dei conigli

La riproduzione dei conigli può essere descritta in un albero come segue:

Page 23: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl23

• All’inizio dell’anno n, ci sono tutte le coppie dell’anno precedente, e una nuova coppia di conigli per ogni coppia presente due anni prima

La regola di espansione

• Indicando con Fn il numero di coppie all’inizio dell’anno n, abbiamo la seguente relazione di ricorrenza:

1 se n=1,2Fn-1 + Fn-2 se n≥3Fn =

Page 24: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl24

Il problema

Come calcoliamo Fn ?

Primi numeri della sequenza di Fibonacci:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, F18=2584,…

Page 25: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl25

Digressione: la sezione aureaRapporto fra due grandezze disuguali a>b, in

cui a è medio proporzionale tra b e a+b

(a+b) : a = a : ba b

e ponendo a=b

Page 26: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl26

• Keplero osservò che

da cui si può dimostrare che la soluzione in forma chiusa della sequenza di Fibonacci è (formula di Binet):

Un approccio numerico

n

n

n F

F 1

lim

Page 27: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl27

Algoritmo fibonacci1

Page 28: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl28

• Molto efficiente: una sola linea di codice (sebbene stiamo trascurando la complessità dell’operazione in essa contenuta)!

• Ma siamo sicuri che sia corretto? Con quale accuratezza devo fissare e per ottenere un risultato corretto?

• Ad esempio, con 3 cifre decimali:

Correttezza ed efficienza

ˆ

n fibonacci1(n) arrotondamento Fn

3 1.99992 2 2

16 986.698 987 987

18 2583.1 2583 2584

Page 29: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl29

Algoritmo fibonacci2

algoritmo fibonacci2(intero n) intero if (n ≤ 2) then return 1 else return fibonacci2(n-1) + fibonacci2(n-2)

Poiché fibonacci1 non è corretto, un approccio alternativo consiste nell’utilizzare direttamente la definizione ricorsiva:

Page 30: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl30

• Per valutare il tempo di esecuzione, calcoliamo il numero di linee di codice T(n) mandate in esecuzione

• Se n≤2: una sola linea di codice• Se n=3: quattro linee di codice, due per la

chiamata fibonacci2(3), una per la chiamata fibonacci2(2) e una per la chiamata fibonacci2(1), cioè

T(3)=2+T(2)+T(1)=2+1+1=4

Correttezza? Corretto per definizione!

Efficienza?

Page 31: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl31

Relazione di ricorrenza

Per n ≥3, in ogni chiamata si eseguono due linee di codice, oltre a quelle eseguite nelle chiamate ricorsive

T(n) = 2 + T(n-1) + T(n-2) n ≥ 3

In generale, il tempo di esecuzione di un algoritmo ricorsivo è pari al tempo speso all’interno della chiamata più il tempo speso nelle chiamate ricorsive

Page 32: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl32

Albero della ricorsione di fibonacci2

• Utile per risolvere la relazione di ricorrenza T(n)• Ogni nodo corrisponde ad una chiamata ricorsiva• I figli di un nodo corrispondono alle sottochiamate

Page 33: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl33

• Etichettando i nodi dell’albero con il numero di linee di codice eseguite nella chiamata corrispondente:– I nodi interni hanno etichetta 2– Le foglie hanno etichetta 1

Calcolare T(n)

• Per calcolare T(n):– Contiamo il numero di foglie– Contiamo il numero di nodi interni

Page 34: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl34

Calcolare T(n)

• In totale le linee di codice eseguite sono

Fn + 2 (Fn-1) = 3Fn-2

Lemma 1:Il numero di foglie dell’albero della ricorsione di fibonacci2(n) è pari a Fn

dim (da fare a casa, per induzione su n)

Lemma 2:Il numero di nodi interni di un albero in cui ogni nodo interno ha esattamente due figli è pari al numero di foglie -1dim (da fare a casa, per induzione sul numero di nodi interni dell’albero)

Page 35: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl35

fibonacci2 è un algoritmo lento:

T(n) ≈ Fn ≈ n

Osservazioni

n = 8

linee di codice eseguite

T(n)=3 · F8 – 2= 3 · 21 – 2 = 61n = 45 T(n) =3·F45 – 2 = 3·1.134903.170 – 2 = 3.404.709.508

n = 100… con le attuali tecnologie, calcolare F100 richiederebbe circa 8000 anni!

Possiamo fare di meglio?

Page 36: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl36

• Perché l’algoritmo fibonacci2 è lento? Perché continua a ricalcolare ripetutamente la soluzione dello stesso sottoproblema. Perché non memorizzare allora in un array le soluzioni dei sottoproblemi?

Algoritmo fibonacci3

algoritmo fibonacci3(intero n) intero sia Fib un array di n interi Fib[1] Fib[2] 1 for i = 3 to n do Fib[i] Fib[i-1] + Fib[i-2] return Fib[n]

Correttezza? Corretto per definizione!

Page 37: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl37

• Linee 1, 2, e 5 eseguite una sola volta• Linea 3 eseguita n – 1 volte (una sola volta per n=1,2)• Linea 4 eseguita n – 2 volte (non eseguita per n=1,2)• T(n): numero di linee di codice mandate in

esecuzione da fibonacci3

Calcolo del tempo di esecuzione

T(n) = n – 1 + n – 2 + 3 = 2n n > 1

T(1) = 4

T(45) = 90Per n=45, circa 38 milioni di volte più veloce

dell’algoritmo fibonacci2!

T(100) = 200

Page 38: Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 1 Università degli.

Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati

Copyright © 2004 - The McGraw - Hill Companies, srl38

• L’algoritmo fibonacci3 impiega tempo proporzionale a n invece di esponenziale in n come fibonacci2

• Tempo effettivo richiesto da implementazioni in C dei due algoritmi su piattaforme diverse:

Calcolo del tempo di esecuzione