dynamic programming

16
Modul-7 : Analisis Algoritma dan Struktur data

Upload: justin-richard

Post on 04-Jan-2016

89 views

Category:

Documents


5 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Dynamic Programming

Modul-7 : Analisis Algoritma dan Struktur data

Page 2: 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.

Page 3: Dynamic Programming

Rekursif Fibonacci:% algoritma rekursifFungsi fibo1(n)

if (n < 2) return nelse 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)

Page 4: Dynamic Programming

Solusi dinamis:% algoritma non rekursifFungsi 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)=1for i=1 to n

F(i) = F(i-1) + F(i-2)end.

Page 5: Dynamic Programming

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.

Page 6: Dynamic Programming

Apabila P(i,j) adalah kebolehjadian untuk A menang perlu i kemenangan, dan untuk B perlu j kemenangan.

Pada awal pertandingan kebolehjadian=P(n,n) Ketika A menang maka P(0,j)=1, p=1, q=0, dan

ketika B menang maka P(i,0)=1, p=0 dan q=1 Secara umum P(i,j)=p*P(i-1,j) + q*P(i,j-1)

Fungsi P(i,j)if i = 0 then return 1else if j = 0 then return 0

else return p*P(i-1,j) + q*P(i,j-1)

Kompleksitasnya: T(k) 2T(k-1) + dAsimptotik : O(2k) = O(4n) bila i=j=n

Page 7: Dynamic Programming

Solusi dinamik adalah dengan menyimpan hasil perhitungan P(i,j) dalam suatu tabel/array, kemudian bila diperlukan tinggal diakses dari tabel

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-nya hanya O(n2)

Page 8: Dynamic Programming

Perkalian dua matriks A,B bisa dilakukan bila jumlah kolom A = jumlah baris 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];}

Page 9: Dynamic Programming

Andaikan ada 4 matriks A1,A2,A3, dan A4 akan diperkalikan maka ada 5 kemungkinan perkalian:

(A1(A2(A3A4)))(A1((A2A3)A4))((A1A2)(A3A4))((A1(A2A3))A4)(((A1A2)A3)A4)

Andaikan dimensinya sbb:◦ 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

Page 10: Dynamic Programming

dapat dibuktikan bahwa :((A1A2)A3)A4 = 10582 perkalian(A1A2)(A3A4) = 54201 perkalian(A1(A2A3))A4 = 2856 perkalianA1((A2A3)A4) = 4055 perkalianA1(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?

Page 11: Dynamic Programming

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).

1

1

)()(n

k

knPkP

1

)1(21)1(

n

n

nnC

Page 12: Dynamic Programming

Solusi dinamik:Function Matrix-Chain-Order(d) arrayn length[d] – 1;for i = 1 to n A[i,i] 0;endFor;for l = 2 to n for i = 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;

endForendForreturn A, s;

Page 13: Dynamic Programming

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

Page 14: Dynamic Programming
Page 15: Dynamic Programming

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

Page 16: Dynamic Programming

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)