Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoCristiana Mattei Modificato 11 anni fa
1
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati
2
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 2 Programmazione dinamica
3
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 3 Tecnica bottom-up: 1.Identifica dei sottoproblemi del problema originario, procedendo logicamente dai problemi più piccoli verso quelli più grandi 2.Utilizza una tabella per memorizzare le soluzioni dei sottoproblemi incontrati: quando si incontra lo stesso sottoproblema, sarà sufficiente esaminare la tabella 3.Si usa quando i sottoproblemi non sono indipendenti, e lo stesso sottoproblema può apparire più volte Programmazione dinamica
4
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 4 un esempio 1.Indentifichiamo i sottoproblemi: li-esimo problema consiste nel calcolo delli-esimo numero di fibonacci. Soluzioni memorizzate in una tabella 2.Calcoliamo le soluzioni di alcuni sottoproblemi facili: F[1]=1 e F[2]=1 3.Alli-esimo passo, avanziamo sulla tabella e calcoliamo soluzione alli- esimo sottoproplema in base alle soluzioni precedentemente calcolate. F[i] F[i-1]+F[i-2] 4.Restituiamo il valore memorizzato in un particolare elemento della tabella, ovvero F[n] 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] 1123F i-2 F i-1 FiFi FnFn +
5
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 5 Schema generale Programmazione Dinamica 1.Indentifichiamo i sottoproblemi del problema originario, e utilizziamo una tabella per memorizzare le soluzioni a tali sottoproblemi 2.Calcoliamo le soluzioni di alcuni sottoproblemi facili e le memorizziamo nella tabella 3.Al passo generico, avanziamo in modo opportuno sulla tabella e calcoliamo soluzione di un dato sottoproblema (corrispondente un elemento della tabella) utilizzando le soluzioni di quei sottoproblemi già risolti 4.Alla fine, restituiamo la soluzione al problema originario, che sarà memorizzato in un particolare elemento della tabella
6
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 6 Distanza fra due stringhe Come definire la distanza? Intuitivamente gaber e haber sono stringhe molto simili (vicine) zolle e abracadabra sono molto diverse (lontane) edit distance: –numero minimo di modifiche elementari per trasformare una stringa in unaltra motivazioni: –edit distance usata nei correttori ortografici (spell checker): se una parola digitata non è nel dizionario sostituiscila con la più vicina presente nel dizionario
7
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 7 Siano X e Y due stringhe di lunghezza m ed n: Distanza tra stringhe Vogliamo calcolare la distanza tra X e Y, ovvero il minimo numero delle seguenti operazioni elementari che permetta di trasformare X in Y
8
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 8 Esempio Come posso trasformare la stringa risotto in presto ? Con 13 operazioni è semplice: –7 cancellazioni –6 inserimenti è 13 la distanza? …NO! Cè un numero minore di operazioni che trasforma la prima stringa nella seconda (e viceversa)
9
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 9 Esempio la distanza è 4
10
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 10 Definiamo X i il prefisso di X fino alli-esimo carattere, per 0i m (X 0 denota la stringa vuota): Approccio Risolveremo il problema di calcolare (X,Y) calcolando (X i,Y j ) per ogni i, j tali che 0i m e 0j n (X,Y)= (X m,Y n ) Manterremo le informazioni in una tabella D di dimensione (m+1) (n+1) Denotiamo con (X,Y) la distanza tra X e Y
11
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 11 Inizializzazione della tabella Alcuni sottoproblemi sono molto semplici (X 0,Y j )=j partendo dalla stringa vuota X 0, basta inserire uno ad uno i j caratteri di Y j (X i,Y 0 )=i partendo da X i, basta rimuovere uno ad uno gli i caratteri per ottenere Y 0 Queste soluzioni sono memorizzate rispettivamente nella prima riga e nella prima colonna della tabella D
12
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 12 Esempio La tabella D inizializzata dallalgoritmo
13
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 13 Avanzamento nella tabella (1/3) Se x i =y j, il minimo costo per trasformare X i in Y j è uguale al minimo costo per trasformare X i-1 in Y i-1 Se x i y j, distinguiamo in base allultima operazione usata per trasformare X i in Y j in una sequenza ottima di operazioni D [ i, j ] = D [ i-1, j-1 ]
14
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 14 Avanzamento nella tabella (2/3) il minimo costo per trasformare X i in Y j è uguale al minimo costo per trasformare X i in Y j-1 più 1 per inserire il carattere y j il minimo costo per trasformare X i in Y j è uguale al minimo costo per trasformare X i-1 in Y j più 1 per la cancellazione del carattere x i D [ i, j ] = 1 + D [ i, j-1 ] D [ i, j ] = 1 + D [ i-1, j ]
15
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 15 Avanzamento nella tabella (3/3) il minimo costo per trasformare X i in Y j è uguale al minimo costo per trasformare X i-1 in Y j-1 più 1 per sostituire il carattere x i per y j D [ i, j ] = 1 + D [ i-1, j-1 ] In conclusione:
16
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati …lo schema di avanzamento: Copyright © 2004 - The McGraw - Hill Companies, srl 16
17
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 17 Pseudocodice Tempo di esecuzione ed occupazione di memoria: Θ(m n) NOTA: Se tengo traccia della casella della tabella che utilizzo per decidere il valore di D[i,j], ho un metodo costruttivo per ricostruire la sequenza di operazioni di editing ottima.
18
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 18 Esempio La tabella D costruita dallalgoritmo. In grassetto sono indicate due sequenze di operazioni che permettono di ottenere la distanza tra le stringhe
19
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 19 Esercizio Modificare lalgoritmo per il calcolo della distanza fra due stringhe in modo da ridurre la complessità spaziale da (mn) a (min{m,n}), mantenendo la complessità temporale di (mn).
20
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © 2004 - The McGraw - Hill Companies, srl 20 Esercizio Progettare un algoritmo che, data la matrice delle distanze calcolata da DistanzaStringhe, calcola una sequenza di operazioni di lunghezza minima che trasforma X in Y. Un algoritmo che, in altre parole, ricostruisce una sequenza di operazioni (inserimento, modifica, cancellazione) che trasforma X in Y. Si analizzi la complessità temporale dellalgoritmo.
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.