Il paradigma della “programmazione dinamica”

Transcript

Il paradigma della “programmazione dinamica”
APA I eII
10 La programmazione dinamica
Il paradigma della
“programmazione dinamica”
Paolo Camurati
Dip. Automatica e Informatica
Politecnico di Torino
Tipologie di problemi
Problemi di ricerca: esiste una soluzione
valida?
z ciclo Hamiltoniano: dato un grafo non
orientato, esiste un ciclo semplice che
contiene tutti i vertici?
„ Problemi di ottimizzazione: quale è la
soluzione migliore?
z Parentesizzazione di un prodotto di
matrici: quale è il minimo numero di
operazioni necessarie?
„
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
2
1
APA I eII
10 La programmazione dinamica
„
A.A. 2006/2007
Problemi ibridi (ricerca+ottimizzazione):
esistono delle soluzioni valide? E quale è la
migliore?
z Commesso
viaggiatore:
ciclo
Hamiltoniano a costo minimo.
10 Il paradigma della programmazione dinamica
3
Rappresentazione
S: soluzioni
V: soluzioni valide
s
s
f(s)
M: soluzioni migliori
s
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
4
2
APA I eII
10 La programmazione dinamica
Classificazione
Problemi di ricerca
z S ≠ V ; |V| = 0 ? Trovare un s ∈ V
„ Problemi di ottimizzazione
z S = V ; trovare max(f(s))
„ Problemi ibridi
z S ≠ V ; trovare max(f(s)) garantendo
che s ∈ V
„
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
5
Definizioni
Soluzione ottima: migliore soluzione possibile
„ Soluzione ottima localmente: soluzione ottima in
un dominio contiguo
„
Soluzione
ottima
f(x)
Soluzioni
ottime
localmente
x
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
6
3
APA I eII
10 La programmazione dinamica
Grafica e moltiplicazione di
matrici
„
„
„
A.A. 2006/2007
Scena tridimensionale come insieme di
traingoli nello spazio
Triangolo individuato da 4 coordinate:
assi x, y e z e dimensione fittizia (per
scalamento)
Operazioni
grafiche
elementari:
scalamento, rotazione e tralsazione di
figure geometriche
10 Il paradigma della programmazione dinamica
7
Scalamento
(αx, βy)
(x, y)
α 0 0
[x, y, 1] · 0 β 0 = [αx, βy, 1]
0 0 1
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
8
4
APA I eII
10 La programmazione dinamica
Rotazione
(x’, y’)
r
x = r cos Ψ
y = r sin Ψ
A.A. 2006/2007
x’ =
=
=
y’ =
=
=
Φ
r
(x, y)
Ψ
cos (Φ+Ψ) = cosΦcosΨ - sinΦsinΨ
sin (Φ+Ψ) = sinΦcosΨ + cosΦsinΨ
10 Il paradigma della programmazione dinamica
9
r cos (Φ+Ψ)
rcosΦcosΨ - rsinΦsinΨ
xcosΦ - ysinΦ
r sin(Φ+Ψ)
rsinΦcosΨ + rcosΦsinΨ
xsinΦ + ycosΦ
cosΦ sinΦ 0
[x, y, 1] · -sinΦ cosΦ 0 = [x’, y’, 1]
0
0
1
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
10
5
APA I eII
10 La programmazione dinamica
Traslazione
(x + ∆x, y + ∆ y)
(x, y)
1 0 0
[x, y, 1] · 0 1 0 = [x+∆x, y+∆ y,1]
∆x ∆y 1
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
11
Trasformazione:
[x, y, z, 1] · A1 · A2 ….. · An
Stessa trasformazione applicata a punti diversi
⇒ calcolo una volta per tutte del prodotto
A1 · A2 ….. · An
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
12
6
APA I eII
10 La programmazione dinamica
Prodotto di 2 matrici
Due matrici A p x q e B s x r sono compatibili
se e solo se q = s
„ Ipotesi di semplificazione: matrici quadrate di
dimensione n x n
„ Algoritmo semplice: 3 cicli annidati,
complessità T(n) = O(n3), se n = 2 richiede 8
moltiplicazioni e 4 somme
„
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
13
Prodotto in catena di n matrici
„
A.A. 2006/2007
Data la sequenza di n matrici compatibili
A1, A2, A3, …. An dove Ai ha dimensioni pi-1 x
pi con i= 1, 2, …,n
calcolare il prodotto A1 · A2 · A3 · …. · An
10 Il paradigma della programmazione dinamica
14
7
APA I eII
10 La programmazione dinamica
Parentesizzazione
Definisce l’ordine di applicazione delle
operazioni di prodotto di due matrici con costo
minimo
„ Esempio: A1·A2·A3· A4 5 parentesizzazioni
possibili
(A1·(A2·(A3· A4)))
(A1·((A2·A3)· A4))
((A1·A2)·(A3· A4 ))
((A1·(A2·A3))· A4)
(((A1·A2)·A3)· A4)
„
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
15
Costi
Date A p x q e B q x r, il costo di A · B è
legato al numero di moltiplicazioni scalari p
xqxr
„ Esempio: A1·A2·A3 dove A1 10x100, A2 100x
5, A3 5x50
„ Parentesizzazione #1: (A1·A2)·A3
z costo di A1·A2 10x100x5 = 5000,
risultato A12 10x5
z costo di A12·A3 10x5x50 = 2500
z costo totale 7500
„
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
16
8
APA I eII
10 La programmazione dinamica
„
Parentesizzazione #2: A1·(A2·A3)
z costo di A2·A3 100x5x50 = 25000,
risultato A23 100x50
z costo di A1·A23 10x100x50 = 50000
z costo totale 75000
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
17
Numero di parentesizzazioni
1
n=1
P(n) =
Σ1≤ k ≤ n-1 P(k) · P(n-k) n ≥ 2
Si dimostra che P(n)= C(n-1)
dove C(n) è detto numero catalano e vale
2n
C(n) = 1/(n+1) n = Ω(4n / n3/2)
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
18
9
APA I eII
10 La programmazione dinamica
La Programmazione Dinamica
„
„
A.A. 2006/2007
Applicata a problemi di ottimizzazione
Passi:
z caratterizzazione della struttura di una
soluzione ottima
z definizione ricorsiva del valore di una
soluzione ottima
z calcolo bottom-up del valore di una
soluzione ottima
z costruzione di una soluzione ottima.
10 Il paradigma della programmazione dinamica
19
Struttura della parentesizzazione
ottima
Notazione:
Ai…j = Ai·Ai+1 · ….. Aj
Divisione in sottoproblemi
A1…n
A1…k
Ak+1…n
1≤k<n
Costo di A1…n:
costo di A1…k + costo di Ak+1…n + costo
prodotto A1…k · Ak+1…n
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
20
10
APA I eII
10 La programmazione dinamica
Perché sia ottima la soluzione di A1…n devono
essere ottime le soluzioni di A1…k e Ak+1…n.
Problema con sottostruttura ottima
applicabilità del paradigma della
programmazione dinamica
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
21
Soluzione ricorsiva
Sottoproblema: determinare il costo minimo della
parentesizzazione di Ai…j con 1 ≤ i ≤ j ≤ n.
m[i, j]: costo minimo per Ai…j
0
se i = j
m[i, j] =
min{m[i,k]+m[k+1,j]+pi-1pkpj} se i < j
i≤k<j
s[i, j] contiene il valore di k che dà una
parentesizzazione ottima nella divisione di Ai…j
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
22
11
APA I eII
10 La programmazione dinamica
Limiti della soluzione ricorsiva
assunzione
di
indipendenza
dei
sottoproblemi
„ numero di sottoproblemi: uno per ogni
scelta di i e j con 1 ≤ i ≤ j ≤ , quindi
n
2 + n = Θ(n2)
„
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
23
Calcolo bottom-up del valore di una
soluzione ottima
Ai matrice pj-1 x pj con i=1, 2,….n
„ input:
sequenza p=p0, p1, …., pn,
length[p]= n+1
„ tabella m[1…n, 1…n] per i costi m[i, j]
„ tabella s[1…n, 1…n] per il valore ottimo di
k
„
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
24
12
APA I eII
10 La programmazione dinamica
Pseudocodice
matrix-chain(p)
n <-length[p]-1
for i <- 1 to n
do m[i,i] <- 0
for l <-2 to n
do for i <- 1 to n-l+1
do j <- i+l-1
m[i,j] <- ∞
for k <- i to j-1
do q <- m[i,k] + m[k+1,j] + pi-1pkpj
if q < m[i,j]
then m[i,j] <- q
s[i,j] <- k
return m ed s
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
25
Esempio
A1
A2
A3
A4
p0
p1
p2
p3
p4
A.A. 2006/2007
4x4
4x6
6 x 15
15 x 10
4
4
6
15
10
4
j
1
i
2
3
3
2
1
4
m
4
j
3
2
1
i
2
3
s
10 Il paradigma della programmazione dinamica
26
13
APA I eII
10 La programmazione dinamica
4
j
m[1,1]
m[2,2]
m[3,3]
m[4,4]
=
=
=
=
0
0
0
0
1
i
2
3
3
2
1
m
0
0
0
4
j
1
i
2
3
4
0
3
2
s
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
27
m[1,2] = m[1,1] + m[2,2] + p0p1p2 = 96
4
j
k=1
3
2
1
m
0
3
0
4
3
2
s
10 Il paradigma della programmazione dinamica
1
i
2
96
j
A.A. 2006/2007
1
0
4
0
1
i
2
3
28
14
APA I eII
10 La programmazione dinamica
m[2,3] = m[2,2] + m[3,3] + p1p2p3 = 360
4
j
k=2
3
2
1
m
0
0
3
2
10 Il paradigma della programmazione dinamica
29
m[3,4] = m[3,3] + m[4,4] + p2p3p4 = 900
4
j
k=3
3
2
1
m
0
96
1
3
360 900 4
0
0
0
1
s
10 Il paradigma della programmazione dinamica
1
i
2
3
2
i
2
4
j
A.A. 2006/2007
i
2
1
4
0
1
3
s
3
0
4
2
i
2
360
96
j
A.A. 2006/2007
1
2
3
3
30
15
APA I eII
10 La programmazione dinamica
4 1
i
m[1,3] = m[1,1] + m[2,3]
j
2
3
+ p0p1p3 = 360+ 240 =600
3
2 456
k=1
96 360 900 4
1
0
m[1,3] = m[1,2] + m[3,3]
0
0
0
m
+ p0p2p3 = 96 + 360 = 456
4 1
i
k=2
j
3
2
s
A.A. 2006/2007
2
2
1
2
3
3
10 Il paradigma della programmazione dinamica
31
4
1
i
m[2,4] = m[2,2] + m[3,4]
j
2
3
+ p1p2p4 = 900 + 240 =1140
2 456 960 3
k=2
96 360 900 4
1
0
m[2,4] = m[2,3] + m[4,4]
0
0
0
m
+ p1p3p4 = 360 + 600= 960
4 1
i
k=3
j
3
2
s
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
1
2
3
2
2
3
3
32
16
APA I eII
10 La programmazione dinamica
m[1,4] = m[1,1] + m[2,4]
4 1
i
+ p0p1p4 = 960 + 160 = 1120 j
3 1056 2
k=1
2 456 960 3
m[1,4] = m[1,2] + m[3,4]
96 360 900 4
1
0
0
0
0
+ p0p2p4 = 1236
m
k=2
4 1
i
j
m[1,4] = m[1,3] + m[4,4]
3
2
3
+ p0p3p4 = 456 + 600 =1056
2
3
3
2
1
2
3
k=3
s
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
33
Complessità
T(n) = Ω(n3)
S(n) = Θ (n2)
rispetto al costo esponenziale nel tempo della
soluzione ricorsiva
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
34
17
APA I eII
10 La programmazione dinamica
Costruzione di una soluzione ottima
matr-chain-mult(A, s, i, j)
if j > i
then X <- matr-chain-mult(A,s,i,s[i,j])
Y <- matr-chain-mult(A,s,s[i,j]+1,j)
return matrix-mult(X,Y)
else return Ai
4
matr-chain-mult(A, s, 1, 4)
j
A
= ((A ·A ) ·A )·A
1…4
1
2
3
3
4
2
s
A.A. 2006/2007
1
3
2
1
3
2
i
2
3
10 Il paradigma della programmazione dinamica
3
35
Applicabilità della programmazione
dinamica
Esistenza di una sottostruttura ottima
„ Esistenza di molti sottoproblemi in comune
„ vantaggio rispetto al divide et impera che
assume l’indipendenza dei sottoproblemi
„ approccio bottom-up rispetto a top-down
(divide et impera)
„
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
36
18
APA I eII
10 La programmazione dinamica
Ricorsione con
memorizzazione
Approccio top-down
„ Memorizzazione delle soluzioni ai
sottoproblemi
„ Lookup: evita di risolvere problemi già
trattati
„
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
37
Esempio: parentesizzazione ottima
memoized-matr-chain(p)
n <-length[p]-1
for i <- 1 to n
do for j <- i to n
do m[i,j] <- ∞
return lookup-chain(p, 1, n)
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
38
19
APA I eII
10 La programmazione dinamica
lookup-chain(p, i, j)
if m[i,j] < ∞
then return m[i,j]
if i=j
then m[i,j] <- 0
else for k <- i to j-1
do q <-lookup-chain(p,i,k)
+ lookup-chain(p,k+1,j)+pi-1pkpj
if q < m[i,j]
then m[i,j] <- q
return m[i,j]
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
39
Esempio: numeri di Fibonacci
Memorizzazione dei valori calcolati in un array knownF
int F(int i);
{ int t;
if (knownF[i] != unknown) return knownF[i];
if (i == 0) t = 0;
if (i == 1) t = 1;
if (i > 1) t = F(i-1) + F(i-2);
return knownF[i] = t;
}
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
40
20
APA I eII
10 La programmazione dinamica
Esempio: il problema dello zaino
Dato un insieme di N oggetti ciascuno dotato
di peso pj e di valore vj e dato un peso
massimo M, determinare il sottoinsieme S di
oggetti tali che:
„ ∑j∈S pj xj ≤ M
„ ∑j∈S vj xj = MAX
A.A. 2006/2007
10 Il paradigma della programmazione dinamica
41
21