Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoGianpiero Danieli Modificato 11 anni fa
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 Insieme di istruzioni, definite passo per passo, in modo da poter essere eseguite meccanicamente e tali da produrre un determinato risultato Definizione informale di algoritmo Esempio: algoritmo preparaCaffè
3
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 3 etimologia Il termine Algoritmo deriva da Algorismus, traslitterazione latina del nome di un matematico persiano del IX secolo, Muhammad al-Khwarizmi, che descrisse delle procedure per i calcoli matematici
4
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 4 Sequenza di passi ben definita che risolve un problema computazionale Definizione di algoritmo La definizione del problema specifica in termini generali la relazione di input/output desiderata
5
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 5 Problema: ricerca del minimo fra n numeri Input: una sequenza di n numeri A= Output: un numero a i tale che a i a j j=1,…,n (stabilisce una relazione tra input e outut) Minimo (A) 1. min= a 1 2. for j=2 to n do 3. if (a j < min) then min=a j 4. return min Algoritmo (descrive procedura computazionale per realizzare tale relazione)
6
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 6 Strutture dati –Concetto di algoritmo è inscindibile da quello di dato –Un algoritmo è una procedura che prende dei dati (input) e, dopo averli elaborati, li restituisce (output) –I dati devo essere organizzati e strutturati in modo tale che la procedura che li elabora sia efficiente
7
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 7 Un algoritmo è lessenza computazionale di un programma, nel senso che fornisce il procedimento per giungere alla soluzione di un dato problema di calcolo Algoritmo diverso da programma –programma è la codifica (in un linguaggio di programmazione) di un algoritmo –un algoritmo è un programma distillato da dettagli riguardanti il linguaggio di programmazione, ambiente di sviluppo, sistema operativo Algoritmi e programmi
8
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 8 Correttezza ed efficienza Vogliamo progettare algoritmi che: –Producano correttamente il risultato desiderato –Siano efficienti in termini di tempo di esecuzione ed occupazione di memoria
9
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 9 Analisi di algoritmi Correttezza: –dimostrare formalmente che un algoritmo è corretto Complessità: –Stimare la quantità di risorse (tempo e memoria) necessarie allalgoritmo
10
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 10 Analisi della complessità –stimare tempo e memoria necessari –stimare il più grande input gestibile in tempi ragionevoli –confrontare due algoritmi diversi –ottimizzare le parti critiche
11
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 11 Un esempio giocattolo: i numeri di Fibonacci
12
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 12 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, quante coppie si avrebbero nellanno n?
13
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 13 Una coppia di conigli genera due coniglietti ogni anno I conigli cominciano a riprodursi soltanto al secondo anno dopo la loro nascita I conigli sono immortali Le regole di riproduzione
14
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 14 Lalbero dei conigli La riproduzione dei conigli può essere descritta in un albero come segue:
15
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 15 Nellanno 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 dellanno n, abbiamo la seguente relazione di ricorrenza: F n-1 + F n-2 se n3 1 se n=1,2 F n =
16
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 16 Il problema Come calcoliamo F n ?
17
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 17 Algoritmo fibonacci2 algoritmo fibonacci2 (intero n) intero if (n 2) then return 1 else return fibonacci2 (n-1) + fibonacci2 (n-2) Un approccio possibile consiste nellutilizzare direttamente la definizione ricorsiva:
18
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 18 Calcoliamo il numero di linee di codice mandate in esecuzione – misura indipendente dalla piattaforma utilizzata 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) Tempo di esecuzione
19
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 19 Relazione di ricorrenza 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) In generale, il tempo richiesto da un algoritmo ricorsivo è pari al tempo speso allinterno della chiamata più il tempo speso nelle chiamate ricorsive
20
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 20 Albero della ricorsione Utile per risolvere la relazione di ricorrenza Nodi corrispondenti alle chiamate ricorsive Figli di un nodo corrispondenti alle sottochiamate
21
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 21 Etichettando i nodi dellalbero con il numero di linee di codice eseguite nella chiamata corrispondente: –I nodi interni hanno etichetta 2 –Le foglie hanno etichietta 1 Calcolare T(n) Per calcolare T(n): –Contiamo il numero di foglie –Contiamo il numero di nodi interni
22
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 22 Calcolare T(n) In totale le linee di codice eseguite sono F n + 2 (F n -1) = 3F n -2 Lemma Il numero di foglie dellalbero della ricorsione di fibonacci2(n) è pari a F n dim (per induzione su n) Lemma Il numero di nodi interni di un albero in cui ogni nodo ha due figli è pari al numero di foglie -1 dim (per induzione sul numero di nodi dellalbero n)
23
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 23 fibonacci2 è un algoritmo lento: Osservazioni Possiamo fare meglio? n = 8 linee di codice eseguite 3 · F 8 – 2= 3 · 21 – 2 = 61 n = 45 3 · F 45 – 2 = 3 · 1.134903.170 = 3.404.709.508
24
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 24 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]
25
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 25 Linee 1, 2, e 5 eseguite una sola volta Linea 3 eseguita n – 1 volte (eccetto per n=1) Linea 4 eseguita n – 2 volte (eccetto per n=1) 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) = 90 38 milioni di volte più veloce dellalgortimo fibonacci2!
26
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 26 Lalgoritmo fibonacci3 impiega tempo proporzionale a n invece che proporzionale in F n come fibonacci2 Tempo effettivo richiesto da implementazioni in C dei due algoritmi su piattaforme diverse: Calcolo del tempo di esecuzione
27
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 27 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 Occupazione di memoria
28
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 28 fibonacci3 usa un array di dimensione n 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
29
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 29 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 (1 di 4)
30
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 30 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… Useremo a questo scopo la notazione asintotica O Notazione asintotica (2 di 4)
31
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 31 Diremo che f(n) = O( g(n) ) se f(n) c g(n) per qualche costante c, ed n abbastanza grande Notazione asintotica (3 di 4)
32
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 32 Ad esempio, possiamo rimpiazzare: –T(n)=3F n con T(n)=O(F n ) –T(n)=2n e T(n)=4n con T(n)=O(n) –T(n)= F n con O(2 n ) Notazione asintotica (4 di 4)
33
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 33 Possiamo sperare di calcolare F n in tempo inferiore a O(n)? Un nuovo algoritmo
34
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 34 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
35
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 35 …prodotto di matrici (AB) i,j = a i,k b k,j k=1 n i=1,…, n j=1,…, n
36
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 36 Algoritmo fibonacci5 Il tempo di esecuzione è ancora O(n) Cosa abbiamo guadagnato?
37
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 37 Possiampo 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 =(9) 2 =81 3 8 =(81) 2 =6561 Calcolo di potenze
38
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 38 Algoritmo fibonacci6
39
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 39 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) = O(1) + T(n/2) T(1) = O(1) Come risolverla?
40
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 40 Metodo delliterazione Risulta: T(n) kc + T(n/2 k ) Per k=log 2 n si ottiene T(n) c log 2 n + T(1) = O(log 2 n ) fibonacci6 è quindi esponenzialmente più veloce di fibonacci3 !
41
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 41 Riepilogo fibonacci6 fibonacci5 fibonacci4 fibonacci3 fibonacci2 O(log n) O(n) O(2 n ) O(log n) O(1) O(n) Tempo di esecuzione Occupazione di memoria
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.