Passo 3: calcolo del costo minimo

Slides:



Advertisements
Presentazioni simili
UNIVERSITA’ DI MILANO-BICOCCA LAUREA MAGISTRALE IN BIOINFORMATICA
Advertisements

Master Bioinformatica 2002: Grafi Problema: cammini minimi da tutti i vertici a tutti i vertici Dato un grafo pesato G =(V,E,w), trovare un cammino minimo.
Programmazione dinamica: problema della sottosequenza più lunga
Procedure e funzioni A. Ferrari.
Procedure e funzioni ricorsive
Informatica Generale Marzia Buscemi
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Programmazione dinamica
Alberi binari di ricerca
Master Bioinformatica 2002: Progetto di Algoritmi1 Programmazione Dinamica (PD) Altra tecnica per risolvere problemi di ottimizzazione, piu generale degli.
Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento.
Ordini Parziali - Reticoli
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti ottimi.
Capitolo 1 Unintroduzione informale agli algoritmi Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Usa la tecnica del.
Iterazione enumerativa (for)
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Algoritmo di Ford-Fulkerson
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. A)
Alberi di Ricorrenza Gli alberi di ricorrenza rappresentano un modo conveniente per visualizzare i passi di sostitu- zione necessari per risolvere una.
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Trovare il percorso minimo da b ad ogni altro vertice
Algoritmi e strutture dati
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Algoritmi e Strutture Dati
Lalgoritmo MergeSort Applica la strategia del divide et impera Divide: suddivide la sequenza di n elementi data in due sottosequenze di n/2 elementi Impera:
Algoritmo SelectSort Invariante di ciclo: ad ogni passo
Intelligenza Artificiale
Anche la RB-Delete ha due fasi: Nella prima viene tolto un nodo y avente uno dei sottoalberi vuoto sostituendolo con la radice dellaltro sottoalbero. Per.
Metodo della moltiplicazione
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.
Radix-Sort(A,d) // A[i] = cd...c2c1
Studieremo alcune tecniche per il progetto di algoritmi e di strutture dati: Programmazione dinamica Algoritmi golosi Analisi ammortizzata Vedremo poi.
Cerchiamo di rispondere alla seconda domanda 2)La soluzione trovata con lalgoritmo goloso è ottima o esistono anche soluzioni con più di quattro attività?
Per valutare la complessità ammortizzata scomponiamo ogni Union: nelle due FindSet e nella Link che la costituiscono e valuteremo la complessità in funzione.
Terzo passo: lunghezza di una LCS LCS-Length(X, Y, m, n) for i = 0 to m c[i, 0] = 0 for j = 1 to n c[0, j] = 0 for j = 1 to n for i = 1 to m if x i ==
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Cammini minimi da un sorgente
Array (ordinamento) CORDA – Informatica A. Ferrari.
Implementazione di dizionari Problema del dizionario dinamico Scegliere una struttura dati in cui memorizzare dei record con un campo key e alcuni altri.
Capitolo 13 Cammini minimi: Algoritmo di Floyd e Warshall Algoritmi e Strutture Dati.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
Codici prefissi Un codice prefisso è un codice in cui nessuna parola codice è prefisso (parte iniziale) di un’altra Ogni codice a lunghezza fissa è ovviamente.
Programmazione dinamica Algoritmi golosi Analisi ammortizzata
Problemi risolvibili con la programmazione dinamica Abbiamo usato la programmazione dinamica per risolvere due problemi. Cerchiamo ora di capire quali.
Algoritmi golosi Tecniche di soluzione dei problemi viste finora:
Complessità Computazionale
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati Luciano Gualà
Transcript della presentazione:

Passo 3: calcolo del costo minimo Matrix-Chain-Order(p, n) for i = 1 to n m[i, i] = 0 for j = 2 to n for i = j-1 downto 1 m[i, j] =  for k = i to j-1 q = m[i, k] + m[k+1, j] + pi-1 pk pj if q < m[i, j] m[i, j] = q s[i, j] = k return m, s Complessità: O(n3)

Passo 4 Esempio 1 2 3 4 5 6 j A1..1 A1..2 1 A1..3 1 A1..4 3 A1..5 3 A1..6 3 1 2 3 4 5 6 m s A1 3035 A2 3515 A3 155 A4 510 A5 1020 A6 2025 A2..2 A2..3 2 A2..4 3 A2..5 3 A2..6 3 m s A3..3 A3..4 3 A3..5 3 A3..6 3 m s A4..4 A4..5 4 A4..6 5 m s A1..6 A5..5 A5..6 5 (A1..3 A4..6) m s ((A1 A2..3) (A4..5 A6)) A6..6 m s ((A1 (A2 A3 )) ((A4 A5) A6)) i

Passo 4: stampa della soluzione ottima Print-Optimal-Parens(s, i, j) if i == j print “Ai” else k = s[i, j] print “(” Print-Optimal-Parens(s, i, k) print “” Print-Optimal-Parens(s, k+1, j) print “)” Complessità: O(n)

Calcolo del prodotto di una sequenza di matrici Matrix-Chain-Multiply(A1...An , i, j, s) if i == j return Ai else k = s[i, j] A = Matrix-Chain-Multiply(A1...An, i, k, s) B = Matrix-Chain-Multiply(A1...An, k+1, j, s) return Matrix-Multiply(A, B)

Si potrebbe anche usare direttamente la definizione ricorsiva del costo minimo per il prodotto di matrici per calcolarlo ricorsivamente senza usare le matrici m ed s.

Rec-Matrix-Chain-Cost(p, i, j) if i = j return 0 else cmin =  for k = i to j-1 q = Rec-Matrix-Chain-Cost(p, i, k) + Rec-Matrix-Chain-Cost(p, k+1, j) + pi-1 pk pj if q < cmin cmin = q return cmin Complessità T(n) con n = j-i+1

Per sostituzione si può dimostrare che dove c = min(a,b). Quindi T(n) = Ω(2n).

Causa della complessità esponenziale: Rec-Matrix-Chain-Cost(p,1,4) 1,4 1,1 2,4 k = 1 k = 2 k = 3 1,2 3,4 1,3 4,4 k = 2 k = 3 3,4 2,3 4,4 1,1 2,2 3,3 4,4 k = 3 1,1 2,2 3,3 2,3 k = 2 k = 1 k = 2 1,1 2,2 1,2 k = 1 3,3 k = 1 2,2 3,3 4,4 2,2 3,3 k = 3 k = 2 La complessità diventa esponenziale perché vengono risolti più volte gli stessi sottoproblemi.

Possiamo evitare il ricalcolo dei costi minimi dei sottoproblemi dotando la procedura ricorsiva di un blocco notes (una matrice m di dimensione nn) in cui annotare i costi minimi dei sottoproblemi già risolti. Memoized-Matrix-Chain-Order(p, n) for i = 1 to n for j = i to n do m[i, j] =  return Memoized-Chain-Cost(p,1, n, m)

Memoized-Chain-Cost(p, i, j, m) if m[i, j] =  if i == j m[i, j] = 0 else for k = i to j-1 q = Memoized-Chain-Cost(p, i, k, M) + Memoized-Chain-Cost(p, k+1, j, M) + pi-1 pk pj if q < m[i, j] m[i, j] = q return m[i, j] Complessità: O(n3)

Problemi risolvibili con la programmazione dinamica Abbiamo usato la programmazione dinamica per risolvere due problemi. Cerchiamo ora di capire quali problemi si possono risolvere con questa tecnica. Sono dei problemi di ottimizzazione in cui da un insieme (generalmente molto grande) di soluzioni possibili vogliamo estrarre una soluzione ottima rispetto ad una determinata misura.

Per poter applicare vantaggiosamente la programmazione dinamica bisogna che: una soluzione ottima si possa costruire a partire da soluzioni ottime di sottoproblemi: Proprietà di sottostruttura ottima .

b) che il numero di sottoproblemi distinti sia molto minore del numero di soluzioni possibili tra cui cercare quella ottima. Altrimenti una enumerazione di tutte le soluzioni può risultare più conveniente. Se ciò è vero significa che uno stesso problema deve comparire molte volte come sottoproblema di altri sottoproblemi. Proprietà della ripetizione dei sottoproblemi .

Supposto che le condizioni a) e b) siano verificate, occorre scegliere l’ordine in cui calcolare le soluzioni dei sottoproblemi. Tale ordine ci deve assicurare che nel momento in cui si risolve un sottoproblema le soluzioni dei sottoproblemi da cui esso dipende siano già state calcolate. Ordine bottom-up.

Alternativamente si può usare una procedura ricorsiva top-down che esprima direttamente la soluzione di un sottoproblema in termini delle soluzioni dei sottoproblemi da cui essa dipende. In questo caso occorre però memorizzare le soluzioni trovate in modo che esse non vengano ricalcolate più volte.

Confronto tra algoritmo iterativo bottom-up ed algoritmo ricorsivo top-down con memoria: Se per il calcolo della soluzione globale servono le soluzioni di tutti i sottoproblemi l’algoritmo bottom-up è migliore di quello top-down. Entrambi gli algoritmi calcolano una sola volta le soluzioni dei sottoproblemi ma il secondo è ricorsivo ed inoltre effettua un controllo in più.

Se per il calcolo della soluzione globale servono soltanto alcune delle soluzioni dei sottoproblemi l’algoritmo bottom-up le calcola comunque tutte mentre quello top-down calcola soltanto quelle che servono effettivamente. In questo caso l’algoritmo top-down può risultare migliore di quello bottom-up. Il prossimo problema è un esempio di questa situazione.

Massima sottosequenza comune In questo problema sono date due sequenze X = x1x2...xm e Y = y1y2...yn e si chiede di trovare la più lunga sequenza Z = z1z2...zk che è sottosequenza sia di X che di Y Ricordiamo che una sottosequenza di una sequenza X è una qualsiasi sequenza ottenuta da X cancellando alcuni elementi.

Il problema della massima sottosequenza ha molte applicazioni. Per citarne solo alcune: individuare le parti comuni di due versioni dello stesso file (sequenze di caratteri ASCII). valutare la similitudine tra due segmenti di DNA (sequenze di simboli A,C,G,T).

Passo 1: Struttura di una massima sottosequenza comune (LCS) Sia Z = z1...zk una LCS di X = x1...xm e Y = y1...yn La sottostruttura ottima di Z discende dalle seguenti proprietà: se xm = yn allora zk = xm = yn e Zk-1 è una LCS di Xm-1 e Yn-1 altrimenti se zk ≠ xm allora Z è LCS di Xm-1 e Y altrimenti zk ≠ yn e Z è una LCS di X e Yn-1

Dimostrazione: Supponiamo xm = yn Se zk ≠ xm = yn potremmo aggiungere il simbolo xm = yn in coda a Z ottenendo una sottosequenza comune più lunga contro l’ipotesi che Z sia una LCS. Quindi zk = xm = yn e Zk-1 è sottosequenza comune di Xm-1 e Yn-1 . Se zk ≠ xm allora Z è sottosequenza di Xm-1 e Y Essendo Z una LCS di X e Y essa è anche una LCS di Xm-1 e Y. il caso zk ≠ yn è simmetrico.

Data una sequenza X = x1x2...xm indicheremo con Xi = x1x2...xi il prefisso di X di lunghezza i. L’insieme dei sottoproblemi è costituito quindi dalla ricerca delle LCS di tutte le coppie di prefissi (Xi ,Yj ), per i = 0,…,m e j = 0,…,n. Totale (m+1)(n+1) = Θ(mn) sottoproblemi.

Passo 2: soluzione ricorsiva Siano X = x1...xm e Y = y1...yn le due sequenze di cui vogliamo calcolare una LCS e per i = 0,1,...,m e j = 0,1,...,n sia ci,j la lunghezza di una LCS dei due prefissi Xi e Yj . Usando le proprietà che abbiamo appena dimostrato possiamo scrivere:

Passo 3 Esempio i 6 5 4 3 2 1 7 j C D B A Y X X=ABCBDAB Y=BDCABA    6 5 4 3 2 1 7 j C D B c s A Y X Passo 3 Esempio X=ABCBDAB Y=BDCABA    1  1  1  1  1  1  1  2  2  1  1  2  2  2  2  1  1  2  2  3  3  1  2  2  2  3  3  1  2  2  3  3  4  1  2  2  3  4  4 