ciąg f

Transkrypt

ciąg f
Temat: Programowanie dynamiczne
1. Programowanie dynamiczne
U ycie strategii programowania dynamicznego polega na zapami taniu w
odpowiedniej strukturze (najcz ciej tablicy) wyników rozwi zania
podproblemów, na które został podzielony problem zasadniczy, unikaj c
w ten sposób wielokrotnych oblicze dla tego samego podproblemu.
Programowanie dynamiczne prowadzi do całkowitej b d cz ciowej
eliminacji rekurencji.
2. Ci g Fibonacciego
Funkcja obliczaj ca warto ci elementów ci gu Fibonacciego
Ci g Fibbonaciego: F(1)=1
F(2)=1
F(n)=F(n-1)+F(n-2) dla n>2
Algorytm I (rozwi zanie rekurencyjne)
int fib(int n)
{
if (n<=2) return 1;
else return fib(n-1)+fib(n-2);
}
Koszt czasowy: O(2n)
Koszt pami ciowy: O(n)
W funkcji fib powtarzaj si wywołania dla tej samej warto ci parametru n.
Na przykład w wywołaniu fib(5) dwa razy powtarza si wywołanie fib(3),
trzy razy powtarza si wywołanie fib(2). Powtarzaj ce si wywołania
anga uj procesor, co powoduje wzrost zło ono ci czasowej algorytmu.
Rekordy aktywacji wywoła rekurencyjnych zwi kszaj zło ono
pami ciow algorytmu.
1
Algorytm II (programowanie dynamiczne w wersji z tablic )
int fib(int n)
{
int f[n+1];
f[1]=f[2]=1;
for (int i=3;i<=n;i++)
f[i]=f[i-1]+f[i-2];
return f[n];
}
Koszt czasowy: O(n)
Koszt pami ciowy: O(n)
Algorytm III (programowanie dynamiczne w wersji bez tablicy)
int fib(int n)
{
int a=1,b=1,c=1;
for (int i=3; i<=n; i++)
{
c=a+b;
a=b;
b=c;
}
return c;
}
Koszt czasowy: O(n)
Zło ono pami ciowa: O(1)
3. Problem optymalnego mno enia macierzy
WP : Ci g macierzy: M 1 , M 2 ,..., M n , gdzie M i jest macierz o
ri −1 wierszach i ri kolumnach.
WK : Wynikiem jest takie rozstawienie nawiasów w iloczynie
M 1 M 2 ... M n , aby ilo wykonanych operacji mno enia
przy obliczaniu iloczynu macierzy była minimalna.
Rozmiar zadania: n
Operacja elementarna: obliczenie ilo ci wykonanych mno e podczas
operacji wyznaczania iloczynu dwóch
2
macierzy.
Na przykład
M 1 = [5 × 10], M 2 = [10 × 20], M 3 = [20 × 1], M 4 = [1× 10]
Ogólnie, je eli mno ymy dwie macierze A = [ p × q ], B = [q × r ] , to
wykonywanych jest pqr mno e .
I kolejno : ((M 1 M 2 ) (M 3 M 4 )) = M 12 M 34 = M 1234
Ilo mno e :
5 ⋅10 ⋅ 20
+
koszt mno enia macierzy M1 M 2
II kolejno : (M 1
Ilo mno e :
20 ⋅1⋅10
koszt mno enia macierzy M 3 M 4
(M 2 (M 3
M 4 ))) = M 1
+
10 ⋅ 20 ⋅10
20 ⋅1⋅10
koszt mno enia macierzy M 3 M 4
+
5 ⋅ 20 ⋅10
= 2200
koszt mno enia macierzy M12 M 34
(M 2
+
koszt mno enia macierzy M 2 M 34
M 34 ) = M 1 M 234 = M 1234
5 ⋅10 ⋅10
= 2700
koszt mno enia macierzy M1 M 234
Algorytm naiwny
Rozwa y wszystkie mo liwe ustawienia nawiasów, obliczaj c dla ka dej
mo liwo ci ilo wykonanych operacji mno enia.
Liczba mo liwych ustawie nawiasów X(n) w iloczynie M 1 M 2 ... M n
wyra a si nast puj c zale no ci rekurencyjn :
(*) X (n ) =
n −1
i =1
1 dla n = 1
X (i ) ⋅ X (n − i − 1) dla n > 1
Mo na pokaza , e posta jawna równania (*) jest nast puj ca:
1 2n − 1 1 n ⋅ ... ⋅ (2n − 1) (n + 1) ⋅ ... ⋅ ( 2n − 1)
X (n ) =
=
= ⋅
n n −1
n
( n − 1)!
( n − 1)!
Mo na pokaza , e:
(n + 1) ⋅ (n + 3) ⋅ ... ⋅ (2n − 1) ≥ 2 n−3
(n − 1)!
3
Algorytm oparty na programowaniu dynamicznym
Oznaczenie:
mij - minimalny koszt obliczenia iloczynu macierzy
M i M i +1 ... M j dla 1 ≤ i ≤ j ≤ n
0 dla i = j
mij = min (m + m
ik
k +1 j + ri −1 rk r j ) dla i < j
i≤k < j
mik − minimalny koszt mno enia macierzy M i M i +1 ... M k o rozmiarze ri −1 × rk
mk +1 j − minimalny koszt mno enia macierzy M k +1 M k +2 ... M j o rozmiarze rk × rj
ri −1 ⋅ rk ⋅ r j − koszt mno enia macierzy M ik M k +1 j o rozmiarze ri −1 × r j
Dla i<j warto
k = i, i+1, i+2, ... , j-1 .
Rozmiary macierzy umieszczamy w tablicy R : [r0 , r1 ,..., rn−1 , rn ] .
Warto ci mij zapami tujemy w tablicy dwuwymiarowej .
Na przykład niech n=4. Rozwa amy iloczyn : M 1 M 2 M 3 M 4 , gdzie
macierze maj nast puj ce rozmiary:
M 1 = [5 × 10], M 2 = [10 × 20], M 3 = [20 × 1], M 4 = [1× 10]
R : [5,10,20,1,10]
m11
m
M = 12
m13
m22
m23
m24
m33
m34
m44
m14
4
m11 = 0, m22 = 0, m33 = 0, m44 = 0
m12 = min (m1k + mk +12 + r0rk r2 ) =
1≤ k < 2
= min m11 + m22 + r0r1r2 = 0 + 0 + 5 ⋅10 ⋅ 20 = 1000
k =1
m23 = min(m2 k + mk +13 + r1rk r3 ) =
2≤ k <3
= min m22 + m33 + r1r2 r3 = 0 + 0 + 10 ⋅ 20 ⋅ 1 = 200
k =2
m34 = min(m3k + mk +14 + r2 rk r4 ) =
3≤ k <4
= min m33 + m44 + r2 r3 r4 = 0 + 0 + 20 ⋅ 1 ⋅ 10 = 200
k =3
m13 = min (m1k + mk +13 + r0rk r3 ) =
1≤ k <3
= min m11 + m23 + r0r1r3 , m12 + m33 + r0r2r3 =
k =1
k =2
= min{0 + 200 + 5 ⋅ 10 ⋅1,1000 + 0 + 5 ⋅ 20 ⋅1} = 250
m24 = min (m2k + mk +14 + r1rk r4 ) =
2≤ k < 4
= min m22 + m34 + r1r2r4 , m23 + m44 + r1r3r4 =
k =2
k =3
= min{0 + 200 + 10 ⋅ 20 ⋅10,200 + 0 + 10 ⋅1 ⋅10} = 300
5
m14 = min (m1k + mk +14 + r0rk r4 ) =
1≤ k < 4
= min m11 + m24 + r0r1r4 , m12 + m34 + r0r2r4 ,m13 + m44 + r0r3r4 =
k =1
k =2
k =3
= min{0 + 300 + 5 ⋅ 10 ⋅10,1000 + 200 + 5 ⋅ 20 ⋅ 10,250 + 0 + 5 ⋅ 1 ⋅ 10} = 300
Czyli:
0
M=
0
0
0
1000 200 200
250
300
300
Wyniki: Optymalne rozstawienie nawiasów w iloczynie
M1 M 2 M 3 M 4 :
(M 1 (M 2
M 3 )) M 4
Algorytm
for (i=1;i<=n;i++) mii := 0;
for (t=1;t<=n-1;t++)
for (i=1;i<= n-t; i++)
{
j=i+t;
mij = min (mik + mk +1 j + ri −1rk r j );
i ≤k < j
};
Zło ono
pesymistyczna:
Tmax (n ) = 1 ⋅ (n − 1) + 2 ⋅ (n − 2 ) + ... + (n − 2) ⋅ 2 + (n − 1) ⋅ 1
( )
3
Mo na pokaza , e Tmax (n ) = Θ n .
6
5. Problem optymalnej triangulacji wielok ta wypukłego
WP: v0, v2, ... , vn-1 – ci g wierzchołków wielok ta wypukłego W
WK: T – zbiór nie przecinaj cych si przek tnych wielok ta,
dziel cych go na rozł czne trójk ty tak, e suma obwodów
powstały trójk tów jest najmniejsza.
Algorytm wykorzystuj cy programowanie dynamiczne
Problem optymalnego mno enia macierzy jest szczególnym przypadkiem
problemu optymalnej triangulacji.
Ka dy egzemplarz problemu nawiasowania iloczynu macierzy
mo na sformułowa jako równowa ny egzemplarz problemu optymalnej
triangulacji.
Ci gowi rozmiarów macierzy r0 , r1 , r2 ,..., rn −1 odpowiada ci g
wierzchołków wielok ta v0 , v1 , v2 ,..., vn −1 .
Wystarczy w algorytmie ustalaj cym optymalne nawiasowanie iloczyn
rozmiarów macierzy: ri −1 ⋅ rk ⋅ rj zast pi wywołaniem funkcji obliczaj cej
obwód trójk ta vi −1 , vk , v j . Warto m ij macierzy wyznaczonej w
algorytmie optymalnego nawiasowania opowiada wynikowi optymalnej
triangulacji wielok ta: vi −1 , vi ,..., v j .
7
Odpowiednikiem rozstawienia nawiasów w iloczynie macierzowym
(M 1 (M 2 M 3 )) M 4
jest nast puj ca triangulacja:
(M 1 (M 2 M 3 ))
v0 , v1 , v2 , v3
(M 2
M3)
v1 , v2 , v3
v0
v1
v4
v2
v3
8