Modul-7 : Analisis Algoritma dan Struktur data

Slides:



Advertisements
Presentasi serupa
DASAR-DASAR ALGORITMA
Advertisements

7. PENJUMLAHAN DUA BUAH MATRIKS
MATERI 9 FUNGSI REKURSIF.
Design and Analysis of ALGORITHM (Session 3)
Fungsi Rekursif.
sebuah fungsi yang memanggil dirinya sendiri
LOGIKA DAN ALGORITMA - PERTEMUAN 8 - REKURSI.
PENCARIAN (SEARCHING)
Program Dinamis (Dynamic Programming)
Algoritma Runut-balik (Backtracking)
Algoritma dan Pemrograman
Sistem Persamaan Linear
Array dan String.
1 Pertemuan 18 Matriks Matakuliah: T0016/Algoritma dan Pemrograman Tahun: 2005 Versi: versi 2.
Algoritma dan Pemrograman
Kasus Buat algoritma untuk menghitung total pembayaran dari proses pembelian.
Pertemuan-2 Kriteria kebaikan suatu algoritme Correctness
Algoritma Divide and Conquer (Bagian 1) Wahyul Wahidah Maulida, ST., M.Eng.
Pokok Bahasan 2 Konsep Pemrosesan Paralel
12-CRS-0106 REVISED 8 FEB 2013 CSG523/ Desain dan Analisis Algoritma Divide and Conquer Intelligence, Computing, Multimedia (ICM)
Castaka Agus Sugianto, M.Kom., M.CS
Algoritma Brute Force Oleh: Muhammad Musta’in ( )
Penyelidikan Operasi Penyelesaian Numerik
Materi 9 LOGIKA & ALGORITMA.
MATERI PERKULIAHAN ANALISIS ALGORITMA
MATERI PERKULIAHAN ANALISIS ALGORITMA
MATERI PERKULIAHAN ANALISIS ALGORITMA
Algoritma Pencarian (searching)
Algoritma Bruteforce Team Fasilkom.
Design and Analysis Algorithm
CSG3F3/ Desain dan Analisis Algoritma
Kuliah Ke - 2 Array dan Matriks (Bab 2)
Bahan Kuliah IF2211 Strategi Algoritma Oleh: Rinaldi Munir
Program Dinamis.
Dynamic Programming Program dinamik adalah salah satu teknik matematika yang digunakan untuk mengoptimalkan proses pengambilan keputusan secara bertahap.
Analisa Algoritma (IF1282)
Modul 5 Algoritma & Struktur Data
Nurita Cahyaningtyas ( )
Algoritma Bruteforce (disarikan dari diktat Strategi Algoritma, Rinaldi Munir) Team Fasilkom.
Algoritme dan Pemrograman
Pertemuan 13 DYNAMIC PROGRAMMING : FIBONACCI SEQUENCE PROBLEM
Faktor analisa algoritma
Matematika Pascal Identifier x bernilai 10 X = 10
REKURSI Struktur data.
Modul 6 : Analisis Algoritma dan Struktur Data
Algoritma dan Pemrograman Subrutin (Function)
ARRAY.
Array Buat algoritma untuk mencari nilai terbesar dari 5 nilai mahasiswa yang diinputkan dengan array.
Quiz : Pengujian P/L 1 : Jelaskan pengertian dari pengujian kotak hitam, sebutkan dan jelaskan 4 jenisnya 2 : Buat kasus2 uji u/ pengujian jalur dasar.
MATRIKS dan DETERMINASI
FUNGSI.
Algoritma dan Pemrograman Rekursif
Matematika Pascal Nilai dari 40 siswa Identifier Nilai memuat 40 data
Rekursif- studi kasus.
Masalah Penugasan (Assignment Problem)
Modul 4 : Analisis Algoritma & Struktur Data
Algoritma Brute Force.
Matematika Pascal Identifier x bernilai 10 X = 10
Kompleksitas Algoritma
Algoritma Divide and Conquer
Algoritma Rekursif Alpro-2.
Rekursif By Serdiwansyah N. A..
Pencarian (searching)
Algoritma Divide and Conquer
Algoritma Pemrograman
Matriks & Operasinya Matriks invers
Dasar-Dasar Pemrograman
Pengulangan FOR - DO Temu 9.
PERTEMUAN 2 MATRIKS.
Penjumlahan dua buah MATRIX. Penjumlahan dua buah MATRIX.
Transcript presentasi:

Modul-7 : Analisis Algoritma dan Struktur data 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 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.

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)

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.

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.

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

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)

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]; }

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 = 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

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?

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

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;

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

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

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)