La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Algoritmi e Strutture Dati (Mod. B) Programmazione Dinamica (Parte I)

Presentazioni simili


Presentazione sul tema: "Algoritmi e Strutture Dati (Mod. B) Programmazione Dinamica (Parte I)"— Transcript della presentazione:

1 Algoritmi e Strutture Dati (Mod. B) Programmazione Dinamica (Parte I)

2 Numeri di Fibonacci Definizione ricorsiva (o induttiva) F(1) = F(0) = 1 F(n) = F(n-1) + F(n-2) Fib(n: intero) if n = 0 or n = 1 then return 1 else return Fib(n-1) + Fib(n-2) Algoritmo ricorsivo

3 F(5) F(4)F(3)F(1)F(0)F(3)F(2) F(1) F(2)F(1) F(0)F(1)F(0) Tempo di esecuzione è O(2 n ) Tempo di esecuzione dellalgoritmo

4 Algoritmo II Fib(n:intero) f[0] = 1 f[1] = 1 for i=2 to n f[i] = f[i-1] + f[i-2] return f[n] f [ ]f [ ] 43210n La complessità in tempo è O(n). Un array f [] di dimensione n. La complessità in spazio è O(n).

5 Algoritmo II f [ ]f [ ] 43210n La complessità in tempo è O(n). Un array f [] di dimensione n. La complessità in spazio è O(n). Fib(n:intero) f[0] = 1 f[1] = 1 for i=2 to n f[i] = f[i-1] + f[i-2] return f[n]

6 Algoritmo II f [ ]f [ ] 43210n La complessità in tempo è O(n). Un array f [] di dimensione n. La complessità in spazio è O(n). Fib(n:intero) f[0] = 1 f[1] = 1 for i=2 to n f[i] = f[i-1] + f[i-2] return f[n]

7 Algoritmo II Fib(n:intero) f[1] = f[2] = 1 for i=2 to n f[0] = f[1] f[1] = f[2] f[2] = f[0] + f[1] return f[2] La complessità in tempo è O(n) f [2] 43210n f [1] f [0] La complessità in spazio è O(1). Un array f [] di dimensione 2.

8 Programmazione Dinamica Strategia sviluppata intorno agli anno 50 nel campo dei problemi di ottimizzazione Applicazione nei casi in cui: ci sia più di una soluzione al problema alle soluzioni è associabile un indice di bontà (ad esempio: costo, preferenza, etc.) si vuole determinare la soluzione con indice ottimo (la soluzione ottima del problema, rispetto allindice di bontà)

9 Programmazione Dinamica ¶ Caratterizzare la struttura di una soluzione ottima · Definire ricorsivamente il valore di una soluzione otti- ma La soluzione ottima ad un problema contiene le soluzioni ottime ai sottoproblemi ¸ Calcolare il valore di una soluzione ottima bottom-up (cioè calcolando prima le soluzioni ai casi più semplici) Si usa una tabella per memorizzare le soluzioni dei sottoproblemi Evitare di ripetere il lavoro più volte: non ricalcolare le soluzioni di sottoproblemi già calcolate. ¹ Cotruire la (una) soluzione ottima.

10 Catena di moltiplcazione tra matrici Problema: Data una sequenza di matrici compat- ibili 2 a 2 al prodotto A 1, A 2, A 3, …, A n, vogliamo calcolare il loro prodotto. La moltiplicazione di matrici si basa sulla molti- plicazione scalare come operazione elementare. Vogliamo calcolare il prodotto impiegando il numero minore possibile di moltiplicazioni Il prodotto di matrici non è commutativo......ma è associativo [ (A 1 A 2 ) A 3 = A 1 (A 2 A 3 ) ]

11 Moltiplicazione tra matrici A: r c B: p q (ma deve valere che c = p ) A B: r q : richiede r c q (r p q) moltiplicazioni scalari A:A: B:B: = 7 5 P:P:

12 Moltiplicazione tra 2 matrici Prod-Matrici(A[r,c],B[p,q],P[r,q]: matrice) if c p then ERRORE dimensioni non compatibili return else for i = 1 to r do for j = 1 to q do sum = 0 for k = 1 to c do sum = sum + A[i,k] B[k,j] P[i,j] = sum Tempo di esecuzione = (r c q) (n 3 )

13 Catena di moltiplcazione tra matrici 3 matrici: A B C Dimensioni: 100 1, 1 100, (( A B ) C ) Num Moltiplicazioni Memoria (A B ) = ((A B ) C ) = (A ( B C )) (B C ) = (A (B C )) =

14 Catena di moltiplcazione tra matrici 4 matrici: A B C D Dimensioni: 50 10, 10 40, 40 30, 30 5 ((( A B ) C ) D ) : moltiplicazioni ( A B ) = (( A B ) C ) = (( A B ) C ) D =

15 Catena di moltiplcazione tra matrici ((( A B ) C ) D ) : moltiplicazioni (( A ( B C )) D ) : moltiplicazioni (( A B )( C D )) : moltiplicazioni ( A (( B C ) D )) : moltiplicazioni ( A ( B ( C D ))) : moltiplicazioni 4 matrici: A B C D Dimensioni: 50 10, 10 40, 40 30, 30 5

16 Criterio di scelta ¶ Determinare il numero di moltiplicazioni scalari necessari per i prodotti tra le matrici in ogni parentesizzazione · Scegliere la parentesizzazione che richiede il numero minimo di moltiplicazioni (criterio di otti- malità) Ma quante sono le parentesizzazioni possibili? per n = 3 sono 2 per n = 4 sono 5 per n > 4 quante sono?

17 Definizione di parentesizzazione Definizione: Un prodotto di matrici A 1 A 2 A 3 … A n si dice completamente parentesizzato se: ¶ consiste di una unica matrice (n = 1) oppure · per qualche 1 k n, è il prodotto, delimitato da pare- ntesi, tra i prodotti completamente parentesizzati A 1 A 2 A 3 … A k e A k+1 A 2 A 3 … A n A B C D A B C A B C D ((A B) C ) (((A B ) C ) D) (A B)

18 Definizione di parentesizzazione Definizione: Un prodotto di matrici A 1 A 2 A 3 … A n si dice completamente parentesizzato se: ¶ consiste di una unica matrice (n = 1) oppure · per qualche 1 k n, è il prodotto, delimitato da pare- ntesi, tra i prodotti completamente parentesizzati A 1 A 2 A 3 … A k e A k+1 A 2 A 3 … A n A B C D C D B B C D A (B (C D)) (A (B (C D) ) ) (C D)

19 Definizione di parentesizzazione Definizione: Un prodotto di matrici A 1 A 2 A 3 … A n si dice completamente parentesizzato se: ¶ consiste di una unica matrice (n = 1) oppure · per qualche 1 k n, è il prodotto, delimitato da pare-ntesi, tra i prodotti completamente parentesizzati A 1 A 2 A 3 … A k e A k+1 A 2 A 3 … A n A B C D ((A B ) (C D) ) (C D) C D A B (A B)

20 Quanti modi ci sono di parentesizzare? A 1, A 2, A 3, …, A n Sia P(n) il numero di modi di calcolare il pro- dotto di n matrici. Supponiamo che lultima moltiplicazione sia (A 1, A 2, …, A k ) (A k+1, …, A n ) 1 k n-1 per ogni scelta di parentesizzazione di (A 1,A 2,…,A k ) ci sono P(n-k) possibili parentesizzazioni dellaltra porzione (A k+1,…,A n ) e per ogni scelta di parentesizzazione di (A k+1,…,A n ) ci sono P(k) possibili parentesizzazioni dellaltra porzione (A 1,A 2,…, A k ).

21 Quanti modi ci sono di parentesizzare? Allora ci sono P(k) P(n-k) modi per un k fissato P(n) = 1 k n-1 P(k) P(n-k)P(1) = P(n) n A 1, A 2, A 3, …, A n Sia P(n) il numero di modi di calcolare il pro- dotto di n matrici. Supponiamo che lultima moltiplicazione sia (A 1, A 2, …, A k ) (A k+1, …, A n ) 1 k n-1

22 Quanti modi ci sono di parentesizzare? Allora ci sono P(k) P(n-k) modi per un k fissato P(n) n Questa è una equazione di ricorrenza

23 Quanti modi ci sono di parentesizzare? Allora ci sono P(k) P(n-k) modi per un k fissato Questa è una equazione di ricorrenza... … la cui soluzione è la sequenza dei numeri catalani

24 Quanti modi ci sono di parentesizzare? Questa è una equazione di ricorrenza... … la cui soluzione è la sequenza dei numeri catalani Quindi: enumerare tutte le possibilità, calcolare il nu- mero di moltiplicazioni e scegliere la parentesizza- zione a costo minore non è praticabile (perché il numero di possibilità è esponenziale)!

25 Soluzione con programmazione dinamica ¶ Caratterizzare la struttura di una soluzione ottima · Definire ricorsivamente il valore di una soluzione ottima ¸ Calcolare il valore di una soluzione ottimabottom-up (dal basso verso lalto) ¹ Cotruzione di una soluzione ottima. Vediamo ora una ad una le 4 fasi del processo di sviluppo

26 Notazione Denoteremo nel seguito con: c 0 : numero di righe della matrice A 1 c i-1 : numero di righe della prima matrice A i c i : numero di colonne della matrice A i A 1…n : sia una parentesizzazione che il risultato del prodotto A 1 A 2 … A n A l…r : sia una parentesizzazione che il risultato del prodotto A l … A r

27 Caratterizzare della soluzione ottima Una soluzione al problema della prentesizzazione ottima di n matrici divide il problema nei due sottoproblemi: quello del prodotto delle prime k matrici A 1…k e quello delle rimanenti n-k A k+1…n (per qualche k). La soluzione finale (A 1…n ) è il risultato del prodotto delle due matrici A 1…k e A k+1…n. Il costo del prodotto A 1…n è la somma del costo del prodotto di A 1…k più il costo di A k+1…n, più il costo del prodotto finale tra le due matrici risultanti, cioè c 0 c k c n.

28 Caratterizzare della soluzione ottima La soluzione finale (A 1…n ) è il risultato del prodotto delle due matrici A 1…k e A k+1…n. Il costo del prodotto A 1…n è la somma del costo del prodotto di A 1…k più il costo di A k+1…n, più il costo del prodotto finale tra le due matrici risultanti, cioè c 0 c k c n. Ma come devono essere fatte le soluzioni ai due sottoproblemi A 1…k e A k+1…n per garantire che la soluzione complessiva (A 1…n = A 1…k A k+1…n ) sia anchessa ottima?

29 Caratterizzare della soluzione ottima Quello che ci serve che valga è che la struttura delle soluzioni ai sottoproblemi sia analoga a quella del problema complessivo. Cioè che soluzioni ottime ai sottoproblemi permettano di costruire la soluzione ottima al problema complessivo. Teorema: Se A 1…n = A 1…k A k+1…n è una parentesizzazione ottima del prodotto A 1 A 2 … A n, allora A 1…k e A k+1…n sono parentesizzazioni ottime dei prodotti A 1 … A k e A k+1 … A n, rispettivamente.

30 Caratterizzare della soluzione ottima Dimostrazione: Supponiamo che A 1…n = A 1…k A k+1…n sia una parentesizzazione ottima di A 1 A 2 … A n ma che almeno uno tra A 1…k e A k+1…n non sia una parentesizzazione ottima del rispettivo prodotto. Il costo c[A 1…n ] = c[A 1…k ] + c[A k+1…n ] + c 0 c k c n Supponiamo che esista una parentesizzazione migliore A 1…k delle prime k matrici (cioè c[A 1…k ] < c[A 1…k ]). Allora basterebbe sostiture A 1…k al posto A 1…k per ottene- re anche una parentesizzazione migliore per A 1…n. Teorema: Se A 1…n = A 1…k A k+1…n è una parentesizzazione ottima del prodotto A 1 A 2 … A n, allora A 1…k e A k+1…n sono parentesizzazioni ottime dei prodotti A 1 … A k e A k+1 … A n, rispettivamente.

31 Caratterizzare della soluzione ottima Questo teorema fornisce la caratterizzazione della struttura della soluzione ottima. Ci dice che ogni soluzione ottima al problema della parentesizzazione contiene al suo interno le soluzioni ottime dei due sottoproblemi. Lesistenza di sottostrutture ottime nella soluzione ottima di un problema è una delle caratteristiche che vanno ricercate per decidere se la tecnica di Programmazione Dinamica è applicabile. Teorema: Se A 1…n = A 1…k A k+1…n è una parentesizzazione ottima del prodotto A 1 A 2 … A n, allora A 1…k e A k+1…n sono parentesizzazioni ottime dei prodotti A 1 … A k e A k+1 … A n, rispettivamente.

32 Definizione del valore di una soluzione ottima Il secondo passo consiste nel definire ricorsi- vamente il valore della soluzione ottima (alla parentesizzazione) in termini delle soluzioni ottime (alle parentesizzazioni) dei sottopro- blemi.

33 Notazione Sia m(l,r) il numero ottimo di moltiplicazioni necessario calcolare il prodotto A l … r dove 1 l r n Definiamo m(1,n) ricorsivamente cone segue: Caso Base: m(l,r) = 0 se l = r

34 Definizione del valore di una soluzione ottima Definiamo m(1,n) ricorsivamente cone segue: Caso Base: m(l,r) = 0 se l = r Caso Induttivo Supponiamo che lultima moltiplicazione sia A l…k A k+1…l dove l k r-1 m(l,r) = m(l,k) + m(k+1,r) + c l-1 c k c r

35 Definizione del valore di una soluzione ottima Caso Base: m(l,r) = 0 se l = r Caso Induttivo A l…k A k+1…l dove l k r-1 m(l,r) = m(l,k) + m(k+1,r) + c l-1 c k c r Ma per risolvere il nostro problema ci interessa sapere per quale valore di k si ottiene il valore minimo per m(l,r)

36 Definizione del valore di una soluzione ottima Caso Base: m(l,r) = 0 se l = r Caso Induttivo A l…k A k+1…l dove l k r-1 m(l,r) = m(l,k) + m(k+1,r) + c l-1 c k c r Ma non conosciamo il valore di k... … quindi dobbiamo tentarli tutti!

37 Calcolo del valore di una soluzione ottima Il terzo passo consiste nel calcolare il valore della soluzione ottima (alla parentesizza- zione) in termini delle soluzioni ottime (alle parentesizzazioni) dei sottoproblemi.

38 Calcolo del valore di una soluzione ottima A partire dallequazione sotto, sarebbe facile definire un algoritmo ricorsivo che calcola il costo minimo m(1,n) di A 1…n Purtroppo vedremo che tale approccio porta ad un algoritmo di costo esponenziale, non migliore dellenumerazione esaustiva.

39 L R m(l,r) = 0 se l = r, m(l,r) = min l k

40 L R m(l,r) = 0 se l = r, m(l,r) = min l k

41 L R m(l,r) = 0 se l = r, m(l,r) = min l k

42 L R m(l,r) = 0 se l = r, m(l,r) = min l k

43 L R m(l,r) = 0 se l = r, m(l,r) = min l k


Scaricare ppt "Algoritmi e Strutture Dati (Mod. B) Programmazione Dinamica (Parte I)"

Presentazioni simili


Annunci Google