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 Università degli.

Presentazioni simili


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

1 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Università degli Studi dellAquila 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ì: – (Aula 1.7) Mercoledì: – (Aula 1.7) Ricevimento: Mercoledì

2 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 2 Programma settimanale 1.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 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 disgiunti 14.Minimo albero ricoprente: Kruskal, Prim, Boruvka.

3 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 3 Libro di testo C. Demetrescu, I. Finocchi, G. Italiano Algoritmi e Strutture dati McGraw-Hill Slide e materiale didattico

4 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 4 Altri testi utili T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein Introduzione agli algoritmi e strutture dati McGraw-Hill P. Crescenzi, G. Gambosi, R. Grossi Strutture di dati e algoritmi Addison-Wesley

5 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 5 Modalità desame Lesame consiste in una prova scritta e una prova orale: gli scritti/orali di teoria e laboratorio possono essere svolti disgiuntamente purché allinterno della stessa sessione Prove parziali (riservate agli studenti del secondo anno): il superamento delle prove parziali dà diritto a svolgere lorale 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

6 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 6 Obiettivi del corso Fornire 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 unintuizione finalizzata alla soluzione di problemi computazionali

7 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 7 Prerequisiti del corso Cosa è necessario sapere… –strutture dati elementari –concetto di ricorsione –dimostrazione per induzione e calcolo infinitesimale

8 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 1 Unintroduzione informale agli algoritmi Algoritmi e Strutture Dati

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

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

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

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

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

14 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 14 Problema: ricerca del massimo fra n numeri Input: una sequenza di n numeri A= Output: un numero a i tale che a i a j j=1,…,n Algoritmo (ad altissimo livello): Inizializza il valore del massimo al valore del primo elemento. Poi, guarda uno dopo laltro tutti gli elementi, e ad ogni passo confronta lelemento in esame con il massimo corrente, e se maggiore, aggiorna il massimo corrente

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

16 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 16 Il nostro pseudo-codice Input: Sequenza di n numeri: Output: valore massimo della sequenza Massimo (A) max= a 1 for j=2 to n do if (a j max) then max=a j return max

17 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 17 Correttezza ed efficienza Vogliamo progettare algoritmi che: –Producano correttamente il risultato desiderato –Siano efficienti in termini di tempo di esecuzione ed occupazione di memoria

18 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 18 Analisi di algoritmi Correttezza: –dimostrare formalmente che un algoritmo è corretto Complessità: –Stimare la quantità di risorse (tempo e memoria) necessarie allalgoritmo –stimare il più grande input gestibile in tempi ragionevoli –confrontare due algoritmi diversi –ottimizzare le parti critiche

19 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 19 Un esempio giocattolo: i numeri di Fibonacci

20 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 20 Leonardo da Pisa (anche noto come Fibonacci) si interessò di molte cose, tra cui il seguente problema di dinamica delle popolazioni: Lisola dei conigli Quanto velocemente si espanderebbe una popolazione di conigli sotto appropriate condizioni? In particolare, partendo da una coppia di conigli in unisola deserta, e data una certa regola di riproduzione, quante coppie si avrebbero nellanno n?

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

22 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 22 Lalbero dei conigli La riproduzione dei conigli può essere descritta in un albero come segue:

23 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 23 Allinizio dellanno n, ci sono tutte le coppie dellanno precedente, e una nuova coppia di conigli per ogni coppia presente due anni prima La regola di espansione Indicando con F n il numero di coppie allinizio dellanno n, abbiamo la seguente relazione di ricorrenza: 1 se n=1,2 F n-1 + F n-2 se n3 F n =

24 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 24 Il problema Come calcoliamo F n ? Primi numeri della sequenza di Fibonacci: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, F 18 =2584,…

25 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 25 Digressione: la sezione aurea Rapporto fra due grandezze disuguali a>b, in cui a è medio proporzionale tra b e a+b (a+b) : a = a : b a b e ponendo a=b

26 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 26 Keplero osservò che da cui si può dimostrare che la soluzione in forma chiusa della sequenza di Fibonacci è (formula di Binet): Un approccio numerico

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

28 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 28 Molto efficiente: una sola linea di codice (sebbene stiamo trascurando la complessità delloperazione 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) arrotondamentoFnFn

29 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 29 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 nellutilizzare direttamente la definizione ricorsiva:

30 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 30 Per valutare il tempo di esecuzione, calcoliamo il numero di linee di codice T(n) mandate in esecuzione Se n2: 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?

31 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 31 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 allinterno della chiamata più il tempo speso nelle chiamate ricorsive

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

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

34 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 34 Calcolare T(n) In totale le linee di codice eseguite sono F n + 2 (F n -1) = 3F n -2 Lemma 1: Il numero di foglie dellalbero della ricorsione di fibonacci2(n) è pari a F n 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 -1 dim (da fare a casa, per induzione sul numero di nodi interni dellalbero)

35 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 35 fibonacci2 è un algoritmo lento: T(n) F n n Osservazioni n = 8 linee di codice eseguite T(n)=3 · F 8 – 2= 3 · 21 – 2 = 61 n = 45 T(n) =3·F 45 – 2 = 3 · – 2 = n = 100… con le attuali tecnologie, calcolare F 100 richiederebbe circa 8000 anni! Possiamo fare di meglio?

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

37 Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 37 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 – = 2n n > 1 T(1) = 4 T(45) = 90 Per n=45, circa 38 milioni di volte più veloce dellalgoritmo fibonacci2! T(100) = 200

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


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

Presentazioni simili


Annunci Google