1 / 16

Dynamic Programming

Dynamic Programming. Modul-7 : Analisis Algoritma dan Struktur data. Apa itu dynamic programming?. Teknik pemrograman yang menghindari komputasi berulang dari hal-hal yang sama dengan cara menyimpan hasil setiap langkah (subproblem) dalam memory atau suatu tabel / vektor

Download Presentation

Dynamic Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Dynamic Programming Modul-7 : Analisis Algoritma dan Struktur data

  2. Apaitu dynamic programming? • Teknik pemrograman yang menghindari komputasi berulang dari hal-hal yang sama dengan cara menyimpan hasil setiap langkah (subproblem) dalam memory atau suatu tabel / vektor • Teknik pemrograman “bottom-up”, dimulai dari subproblem kecil selangkah-demi selangkah, dengan antisipasi hal-hal yang mungkin berulang (diperlukan lagi) sehingga dapat disimpan dalam suatu tabel.

  3. Rekursif Fibonacci: % algoritma rekursif Fungsi fibo1(n) if (n < 2) return n else return fibo1(n-1) + fibo1(n-2); • Misalnya: fibo1(4) = fibo1(3) + fibo1(2), sehingga fibo1(3) dihitung = fibo1(2)+fibo1(1), dan fibo1(2) juga dihitung = fibo1(1) + fibo1(0). Disini fibo1(2) dua kali dihitung, demikian pula fibo1(1). Komputasinya tidak efisien • Karena F(n+1)/F(n) = golden ratio = 1.61803, maka kompleksitasnya adalah O(1.62n) • Algoritma yang menerapkan dynamic programming diharapkan memiliki kompleksitas linier O(n)

  4. Solusi dinamis: % algoritma non rekursif Fungsi fibo2(n) i  1; j  0; for k  1 to n do { j  i + j; i  j – i; } return j; • Atau sbb: F(0) = 0; F(1)=1 for i=1 to n F(i) = F(i-1) + F(i-2) end.

  5. Contoh1: Kompetisi Tim Olahraga • Andaikan ada dua tim olahraga, tim A dan tim B, bertanding sebanyak maksimum 2n-1 pertandingan, dimana tim yang pertama memenangkan n pertandingan dianggap sebagai pemenang. • Assumsi pertama yang harus diterapkan adalah tidak pernah ada pertandingan dengan hasil draw, kedua, setiap pertandingan adalah independen, tidak bergantung dengan pertandingan sebelumnya. • Anggaplah bahwa kebolehjadian untuk tim A menang adalah p, dan tentu saja kebolehjadian tim B menang adalah q = 1 – p.

  6. Apabila P(i,j) adalahkebolehjadianuntuk A menangperluikemenangan, danuntuk B perlu j kemenangan. • Padaawalpertandingankebolehjadian=P(n,n) • Ketika A menangmaka P(0,j)=1, p=1, q=0, danketika B menangmaka P(i,0)=1, p=0 dan q=1 • Secaraumum P(i,j)=p*P(i-1,j) + q*P(i,j-1) Fungsi P(i,j) if i = 0 then return 1 else if j = 0 then return 0 else return p*P(i-1,j) + q*P(i,j-1) Kompleksitasnya: T(k)  2T(k-1) + d Asimptotik : O(2k) = O(4n) bilai=j=n

  7. Solusidinamikadalahdenganmenyimpanhasilperhitungan P(i,j) dalamsuatutabel/array, kemudianbiladiperlukantinggaldiaksesdaritabel Fungsi Pertandingan(n, p) array P[0..n, 0..n]; q = 1 – p; for s = 1 to n { P[0,s]  1; P[s,0]  0; for k = 1 to (s-1) { P[k,s-k] = p*P[k-1,s-k] + q*P[k,s-k-1]; } } for s = 1 to n { for k = 0 to (n-s) { P[s+k,n-k] = p*P[s+k-1,n-k] + q*P[s+k,n-k-1]; } } return P[n,n]. • Kompleksitas-nyahanya O(n2)

  8. Contoh 2: PerkalianMatriksBerantai • Perkalianduamatriks A,B bisadilakukanbilajumlahkolom A = jumlahbaris B Fungsi Kali-Matrix(A, B) if columns(A) ≠ rows(B) then error “dimensi tidak sesuai”; else { for i  1 to rows(A) for j  1 to columns(B){ C[i,j]  0; for k  1 to columns(A) C[i,j]  C[i,j] + A[i,k]*B[k,j]; }

  9. Andaikanada 4 matriks A1,A2,A3, dan A4 akandiperkalikanmakaada 5 kemungkinanperkalian: (A1(A2(A3A4))) (A1((A2A3)A4)) ((A1A2)(A3A4)) ((A1(A2A3))A4) (((A1A2)A3)A4) • Andaikandimensinyasbb: • A1 : 13 x 5 • A2 : 5 x 89 • A3 : 89 x 3 • A4 : 3 x 34 • Maka (A1A2) perlu: 13 x 5 x 89 = 5785 perkalian, (A1A2)A3 perlu: 13 x 89 x 3 = 3471, dan ((A1A2)A3)A4 perlu : 13 x 3 x 34 = 1326 • Total perlu 5785 + 3471 + 1326 = 10582 perkalian

  10. dapat dibuktikan bahwa : ((A1A2)A3)A4 = 10582 perkalian (A1A2)(A3A4) = 54201 perkalian (A1(A2A3))A4 = 2856 perkalian A1((A2A3)A4) = 4055 perkalian A1(A2(A3A4)) = 26418 perkalian • Dengan kata lain kompleksitas tergantung pada cara perkalian yang dipilih, dimana yang paling efisien adalah (A1(A2A3))A4 = 2856 • Persoalannya: bagaimana menemukan cara perkalian matriks berantai yang efisien? Apakah dengan cara coba-coba satu persatu?

  11. Secara teoritis cara coba-coba tdk efisien: • Andaikan jumlah percobaan yang harus dilakukan adalah P(n) untuk n buah matriks. Karena tanda kurung bisa disisipkan antara matriks ke-k dan ke (k+1) untuk semua nilai k mulai dari 1 hingga (n-1), maka akan diperoleh rekurensi: P(n) = 1 bila n = 1 = bila n  2 • Solusinya adalah “catalan number” C(n-1) = dengan Ω(4n/n3/2).

  12. Solusidinamik: Function Matrix-Chain-Order(d)  array n length[d] – 1; fori = 1 to n A[i,i]  0; endFor; for l = 2 to n fori = 1 to (n – l + 1) j i + l – 1; A[i,j] ; for k = i to j-1 q  A[i,k] + A[k+1,j] + d(i-1)*d(k)*d(j); if (q < A[i,j]) then A[i,j] q; s[i,j]  k; endIf endFor; endFor endFor return A, s;

  13. d : adalah vektor yang menyatakan dimensi dari n buah matriks, misalnya: M1 : d0 x d1, M2 : d1 x d2 … Mn : d(n-1) x d(n) • Contoh: d = [13, 5, 89, 3, 34] adalah dimensi dari 4 matriks A1, A2, A3, dan A4 • Tabel A[n,n] memuat biaya perkalian setiap kombinasi perkalian matriks • Tabel s[n,n] berisi indeks, dimana s[i,j] berisi indeks k pada saat A[i,j] optimum

  14. the call PRINT-OPTIMAL-PARENS(s, 1, 6) prints the parenthesization ((A1 (A2 A3)) ((A4 A5)A6)).

  15. Algoritma Matrix-Chain-Multiply(A, s, i, j) if (j > i) then X  Matrix-Chain-Multiply(A, s, i, s[i,j]); Y  Matrix-Chain-Multiply(A, s, s[i,j] + 1,j); return Matrix-Multiply(X, Y); else return A(i) endIf Algoritma ini menggunakan tabel A[ ] dan tabel s[ ] dari algoritma “matrix-chain-order” untuk menujukkan cara melakukan perkalian matriksnya. Mula-mula algoritma ini dipanggil dengan argumen (A, s, 1, n)

More Related