Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Modul-7 : Analisis Algoritma dan Struktur data

Presentasi serupa


Presentasi berjudul: "Modul-7 : Analisis Algoritma dan Struktur data"— Transcript presentasi:

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

2 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 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 = , maka kompleksitasnya adalah O(1.62n) Algoritma yang menerapkan dynamic programming diharapkan memiliki kompleksitas linier O(n)

4 Solusi dinamis: Atau sbb: F(0) = 0; F(1)=1 % 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 Pada awal pertandingan kebolehjadian=P(n,n)
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 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) bila i=j=n

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

8 Contoh 2: Perkalian Matriks Berantai
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]; }

9 Andaikan dimensinya sbb:
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 = perkalian, (A1A2)A3 perlu: 13 x 89 x 3 = 3471, dan ((A1A2)A3)A4 perlu : 13 x 3 x 34 = 1326 Total perlu = perkalian

10 dapat dibuktikan bahwa :
((A1A2)A3)A4 = perkalian (A1A2)(A3A4) = perkalian (A1(A2A3))A4 = perkalian A1((A2A3)A4) = perkalian A1(A2(A3A4)) = 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) = bila n = 1 = bila n  2 Solusinya adalah “catalan number” C(n-1) = dengan Ω(4n/n3/2).

12 Solusi dinamik: Function Matrix-Chain-Order(d)  array
n 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 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

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

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


Download ppt "Modul-7 : Analisis Algoritma dan Struktur data"

Presentasi serupa


Iklan oleh Google