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