Natura Fibonacciego

Transkrypt

Natura Fibonacciego
Temat: Programowanie dynamiczne. Przykłady zastosowania.
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.
Problem mo e by rozwi zany technik programowania dynamicznego gdy
ma własno optymalnej podstruktury czyli jego optymalne rozwi zanie
jest funkcj optymalnych rozwi za podproblemów. Innymi słowy problem
ma własno optymalnej podstruktury gdy ma natur rekurencyjn . Jednak
rozwi zanie problemu nie powinno by zapisywane w postaci kodu
rekurencyjnego, ale poprzez spami tywanie wyników lokalnych.
2. Przykłady zastosowania
a) Ci g Fibonacciego
Funkcja obliczaj ca warto ci elementów ci gu Fibonacciego
Ci g Fibbonaciego: F(0)=0
F(1)=1
F(n)=F(n-1)+F(n-2) dla n>2
Algorytm I (rozwi zanie rekurencyjne)
F(n)
{
if (n==0) return 0;
else if (n==1) return 1;
else return F(n-1)+F(n-2);
}
Koszt czasowy: O(2n)
Koszt pami ciowy: O(n)
1
Algorytm II (programowanie dynamiczne)
F(n)
{
if (n==1) return 0;
else if (n==2) return 1;
for (i=2; i<=n; i++)
{
c = a+b;
a = b;
b = c;
}
return c;
}
Koszt czasowy: O(n)
Zło ono pami ciowa: O(1)
b) Problem optymalnego mno enia macierzy
WP : Ci g rozmiarów macierzy: M 1 , M 2 ,..., M n , gdzie M i jest macierz o
ri −1 wierszach i ri kolumnach; wektor rozmiarów R : [r0, r1, …, rn]
WK: Takie rozstawienie nawiasów w iloczynie macierzowym:
M 1 M 2 ... M n , aby liczba wykonanych operacji mno enia
wykonanych przy obliczaniu iloczynu macierzy była minimalna.
Przykład 1
M 1 = [5 × 10], M 2 = [10 × 20], M 3 = [20 × 1], M 4 = [1× 10]
R = [5 10 20 1 10],
Je eli mno ymy dwie macierze: A = [ p × q ], B = [q × r ] , to wykonywanych
jest pqr mno e .
2
I kolejno : ((M 1 M 2 ) (M 3 M 4 )) = M 12 M 34 = M 1234
Liczba mno e :
5 ⋅10 ⋅ 20
+
koszt mno enia macierzy M1 M 2
II kolejno : (M 1
Liczba 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
M 34 ) = M 1 M 234 = M 1234
+
koszt mno enia macierzy M 2 M 34
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 liczb 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:
X (n ) =
1 2n − 1 1 n ⋅ ... ⋅ ( 2n − 1) (n + 1) ⋅ ... ⋅ (2n − 1)
= ⋅
=
n n −1
n
(n − 1)!
(n − 1)!
Mo na udowodni , e:
(n + 1) ⋅ (n + 3) ⋅ ... ⋅ (2n − 1) ≥ 2 n−3
(n − 1)!
3
Algorytm oparty na programowaniu dynamicznym
Oznaczenie:
mij - minimalny koszt obliczenia fragmentu iloczynu macierzy od
macierzy i do macierzy j
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 × r j
ri −1 ⋅ rk ⋅ r j − koszt mno enia macierzy M ik M k +1 j o rozmiarze ri −1 × r j
Algorytm polega na wyznaczeniu warto ci funkcji mij, które zapami tuje w
tablicy dwuwymiarowej.
Własno
optymalnej podstruktury dla problemu optymalnego
nawiasowania wynika z faktu, e optymalne nawiasowanie całego ci gu
jest zale ne od optymalnego nawiasowania fragmentów:
M 1 M i +1 ... M k
M k +1 M k + 2 ... M n
dla k =1, 2, …, n-1
4
Przykład 2
M 1 = [5 × 10], M 2 = [10 × 20], M 3 = [20 × 1], M 4 = [1 × 10]
R : [5, 10, 20, 1, 10]
m11
m12
M =
m13
m22
m23
m24
m33
m34
m44
m14
Proces wyznaczania warto ci macierzy M
Elementy pierwszego wiersza macierzy M
m11 = 0, m22 = 0, m33 = 0, m44 = 0
Elementy drugiego wiersza macierzy M (koszty fragmentów o długo ci
dwóch macierzy), wyrazy m12, m23, m34
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
5
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
Elementy trzeciego wiersza macierzy M (koszty fragmentów o długo ci
trzech macierzy), wyrazy m13, m24.
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
Elementy czwartego wiersza macierzy M (koszty fragmentów o długo ci
czterech macierzy), wyrazy m14
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
6
Ostatecznie macierz M ma nast puj c posta :
0
M=
0
0
0
1000 200 200
250
300
300
Optymalny koszt optymalnego mno enia wynosi 300 i zachodzi przy
nast puj cym rozstawieniu nawiasów w iloczynie M 1 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 algorytmu rozwi zuj cego problem optymalnego
nawiasowania stosuj cego programowanie dynamiczne:
Rozmiar problemu: n – liczba macierzy w iloczynie
Operacja elementarna: wyznaczanie iloczynu rozmiarów macierzy ri-1rk rj
Tmax (n ) = 1 ⋅ (n − 1) + 2 ⋅ (n − 2 ) + ... + (n − 2) ⋅ 2 + (n − 1) ⋅ 1
( )
Mo na pokaza , e Tmax (n ) = Θ n .
3
7
c) 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 ⋅ r j zast pi wywołaniem funkcji obliczaj cej
mij macierzy wyznaczonej w
obwód trójk ta vi −1 , vk , v j . Warto
algorytmie optymalnego nawiasowania opowiada wynikowi optymalnej
triangulacji wielok ta: vi −1 , vi ,..., v j .
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 2
M 3 ))
M3)
v0 , v1 , v2 , v3
v1 , v2 , v3
8
v0
v1
v4
v2
v3
9