La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Programmazione dinamica Introduzione. Prodotto di una sequenza di matrici. Caratterizzazione soluzione ottima. Definizione ricorsiva soluzione ottima.

Presentazioni simili


Presentazione sul tema: "Programmazione dinamica Introduzione. Prodotto di una sequenza di matrici. Caratterizzazione soluzione ottima. Definizione ricorsiva soluzione ottima."— Transcript della presentazione:

1 Programmazione dinamica Introduzione. Prodotto di una sequenza di matrici. Caratterizzazione soluzione ottima. Definizione ricorsiva soluzione ottima. Calcolo del valore di una soluzione ottima. Costruzione di una soluzione ottima.

2 Programmazione dinamica La programmazione dinamica, generalmente, viene adottata per risolvere problemi di ottimizzazione. Questo vuol dire: il problema ammette diverse soluzioni ogni soluzione ha un costo si sta cercando una soluzione che mi dia il valore ottimo (il massimo o il minimo dei costi) Nota: non si cerca la soluzione ottima, ma una soluzione ottima, dato che possono esistere varie soluzioni ottime.

3 Prodotto di una sequenza di matrici Problema: Si vuole effettuare il prodotto di una sequenza di matrici minimizzando il numero di moltiplicazioni scalari effettuati. Il costo dipende dalla sua parentesizzazione: ((A 1 ((A 2 A 3 ) (A 4 …)))A n ) Per esempio: dim(A 1 )=10x100; dim(A 2 )=100x5; dim(A 3 )=5x50; E meglio ((A 1 A 2 ) A 3 ) ? Oppure (A 1 (A 2 A 3 )) ?

4 Costo moltiplicazione di due matrici MATRIX-MULTIPLY(A, B) 1. if columns[A] rows[B] 2. then error dimensioni non compatibili 3. else for i 1 to rows[A] 4. do for j 1 to columns[B] 5. do C[i,j] 0 6. for k 1 to columns[A] 7. do C[i,j] C[i,j] + A[i,k] B[k,j] 8. return C Sostanzialmente: Se si moltiplica A con dimensioni p x q e B con dimensioni q x r, si ottiene una nuova matrice C con dimensioni p x r. Il costo è determinato dal numero di moltiplicazioni scalari effettuati, ossia p q r. Per ogni elemento della matrice C (p x r) bisogna effettuare q moltiplicazioni scalari.

5 Prodotto di una sequenza di matrici Ritornando allesempio: dim(A 1 )=10x100; dim(A 2 )=100x5; dim(A 3 )=5x50; (A 1 A 2 ) ( ) = 5000 molt. ((A 1 A 2 ) A 3 ) ( ) + ( ) = 7500 molt. (A 2 A 3 ) ( ) = molt. (A 1 (A 2 A 3 )) ( ) + ( ) = molt. Quindi: ((A 1 A 2 ) A 3 ) costa meno di (A 1 (A 2 A 3 ))!

6 Supponiamo che per risolvere il problema si controlli in maniera esaustiva tutte le soluzioni. P(n) = tutte le possibili parentesizzazioni di una sequenza di n matrici Numero di parentesizzazioni sequenza dei numeri Catalaniprodotto di sottoparentesizzazioni Nota: la ricerca esaustiva risulta essere molto dispendiosa!

7 Soluzione in programmazione dinamica Lo sviluppo di un algoritmo in programmazione dinamica può essere diviso in quattro fasi o passi: 1.Caratterizzazione della struttura di una soluzione ottima. 2.Definizione ricorsiva del valore di una soluzione ottima. 3.Calcolo del valore di una soluzione ottima con una strategia bottom-up. 4.Costruzione di una soluzione ottima a partire dalle informazioni calcolate.

8 1. Caratterizzazione della struttura di una soluzione ottima. Per il nostro problema una soluzione ottima è del tipo: ((A 1 A 2 … A k ) (A k+1 A k+2 … A n )) con 1 k n tale che (A 1 A 2 … A k ) la sua parentizzazione è ottima per la sequenza (altrimenti scelgo quella ottima, costa meno!). Dimensione matrice finale = p x q (A k+1 A k+2 … A n ) la sua parentizzazione è ottima per la sequenza (altrimenti scelgo quella ottima). Dimensione matrice finale = q x r Inoltre il costo della soluzione ottima è costo = costo(A 1 A 2 … A k ) + costo(A k+1 A k+2 … A n ) + pqr

9 2. Definizione ricorsiva del valore di una soluzione ottima. Si determina una soluzione ottima ricorsivamente in termini dei valori delle soluzioni ottime dei sottoproblemi. Sottoproblema: con 1 i j n m[i,j] = costo minimo per la sottosequenza m[i,i] = costo minimo per la sottoseq. = A i = 0 m[1,n] = costo minimo per la sequenza

10 2. Definizione ricorsiva del valore di una soluzione ottima. E facile vedere che il valore di m[i,j] è ottenuto sommando i costi minimi del calcolo dei sottoprodotti A i..k e A k+1..j con il costo del prodotto delle due matrici risultanti (pari a p i-1 p k p j ). ( p i-1 A i p i … p k-1 A k p k ) ( p k A k+1 p k+1 … p j-1 A j p j ) Nota: definiamo s[i,j] = k, per tenere traccia del valore k che costituisce una soluzione ottima per il sottoproblema. Dimensioni matrice A j

11 3. Calcolo del valore di una soluzione ottima con strategia bottom-up. Bottom-up vuol dire che si parte a calcolare i costi ottimi per le sottosequenze lunghe 1, poi quelle lunghe 2 e così via… m[1,1] = 0m[2,2] = 0m[3,3] = 0m[4,4] = 0m[n,n] = 0… m[1,2]m[2,3]m[3,4]m[4,5]…m[n-1,n] m[1,3]m[2,4]m[3,5]…m[n-2,n] … m[1,n] lung=1 lung=2 lung=3 lung=n … BOTTOM UP

12 3. Calcolo del valore di una soluzione ottima con strategia bottom-up. MATRIX-CHAIN-ORDER(p) // INPUT: p = dimensioni matrici in ingresso, lunghezza(p) = n+1 1. n length[p] – 1// n = lunghezza(p) – 1 2. for i 1 to n 3. do m[i,i] 0 // costo 0 sottoseq. lunghe 1 4. for l 2 to n // l = lunghezza sottoseq., da 2 a n !!! 5. do for i 1 to n-l+1// i = inizio sottoseq. 6. do j i+ l -1// j = fine sottoseq. 7. m[i,j] // costo sottoseq. [i,j] inizializzato a 8. for k i to j-1 // calcolo k soluzione ottima m[i,j] 9. do q m[i,k] + m[k+1,j] + p i-1 p k p j 10. if q < m[i,j]// se costo calcolato è minore del costo ottimo attuale 11. then m[i,j] q// aggiorna matrice costi 12. s[i,j] k// aggiorna matrice indici k 13. return m e s

13 3. Calcolo del valore di una soluzione ottima con strategia bottom-up. matricedimensione A1A1 30 x 35 A2A2 35 x 15 A3A3 15 x 5 A4A4 5 x 10 A5A5 10 x 20 A6A6 20 x A1A1 A2A2 A3A3 A4A4 A5A5 A6A6 m ji

14 3. Calcolo del valore di una soluzione ottima con strategia bottom-up. matricedimensione A1A1 30 x 35 A2A2 35 x 15 A3A3 15 x 5 A4A4 5 x 10 A5A5 10 x 20 A6A6 20 x s ji ((A 1 ) (A 2 A 3 )) ((A 4 A 5 ) A 6 ) s[1,6]=3; s[1,3]=1; s[4,6]=5.

15 3. Calcolo del valore di una soluzione ottima con strategia bottom-up. Osservazione importante: Il numero di sottoproblemi è relativamente basso: un problema per ogni scelta di i e j, con 1 i j n, per un totale di numero di sottoproblemi Θ(n 2 ) =memoria necessaria per m e s Se si facesse una ricerca esaustiva potrebbe succedere di risolvere più volte lo stesso sottoproblema. Per esempio, la soluzione ((A 1 ) (A 2 A 3 )) ((A 4 A 5 ) A 6 ) e la soluzione (A 1 ) (((A 2 A 3 ) (A 4 A 5 )) A 6 ) hanno in comune (A 2 A 3 ) e (A 4 A 5 ). Sottoproblemi comuni Problemi di lunghezza 0 (m[i,i]) Problemi di lunghezza l>0 (m[i,j])

16 4. Costruzione di una soluzione ottima La strategia per la costruzione di una soluzione ottima dipende dalle informazioni dei sottoproblemi calcolate nelle fasi precedenti. Nel nostro caso specifico utilizziamo la matrice s: A 1 A 2 … A n A 1 A 2 … A s[1,n] A s[1,n]+1 A s[1,n]+2 … A n A 1 … A s[1,s[1,n]] A s[1,s[1,n]]+1 … A s[1,n]

17 4. Costruzione di una soluzione ottima Nel nostro caso specifico utilizziamo la matrice s: A 1 A 2 A 3 A 4 A 5 A 6 A 1 A 2 A 3 A 4 A 5 A 6 A 2 A 3 A1A1 A 4 A 5 A6A6 A3A3 A2A2 A5A5 A4A4 Soluzione: ((A 1 ) (A 2 A 3 )) ((A 4 A 5 ) A 6 ). s[1,6]=3. s[1,3]=1; s[4,6]=5. s[2,3]=2; s[4,5]=4.

18 4. Costruzione di una soluzione ottima MATRIX-CHAIN-MULTIPLY(A, s, i, j) 1. if j > i 2. then X MATRIX-CHAIN-MULTIPLY(A, s, i, s[i,j]) 3. Y MATRIX-CHAIN-MULTIPLY(A, s, s[i,j]+1, j) 4. return MATRIX-MULTIPLY(X,Y) 5. else return A i MATRIX-CHAIN-MULTIPLY(A, s, 1, 6) calcola il prodotto della sequenza di matrici secondo la parentizzazione: ((A 1 ) (A 2 A 3 )) ((A 4 A 5 ) A 6 ).

19 Altri problemi La più lunga sottosequenza in comune Dati due sequenze X e Y si cerca una sottosequenza Z comune di lunghezza massima. Il problema della zaino Dato degli oggetti O 1, O 2, …, O n che hanno volume V 1, V 2, …, V n e valore Val 1, Val 2, …, Val n, si cerca di riempire lo zaino di volume V massimizzando la somma dei valori. Il problema consiste nel scegliere i vari oggetti in modo che il volume complessivo sia al massimo V e la somma dei loro valori sia ottimo.


Scaricare ppt "Programmazione dinamica Introduzione. Prodotto di una sequenza di matrici. Caratterizzazione soluzione ottima. Definizione ricorsiva soluzione ottima."

Presentazioni simili


Annunci Google