Pemrograman Dinamis
Programming Dinamis
(Dynamics Programming)
• Seperti metode divide and conquer, pemrograman dinamis
memecahkan masalah (problem) dengan menggabungkan solusi
dengan subproblem
• “Pemrograman” disini merefer : metode tabular, bukan membuat
program komputer
• Algoritma yang berdasarkan metode divide and conquer –
mempartisi problem ke subproblem independen, memecahkan
subproblem secara rekursif, dan menggabungkan solusinya untuk
memecahkan problem original
• Sebaliknya, pemrograman dinamis, dapat diaplikasikan saat
subproblem tidak independen , dimana subproblem membagi
subsubproblem
• Algoritma pemrograman dinamis memecahkan setiap subsubproblem
hanya satu kali dan kemudian jawabannya dalam suatu tabel, untuk
penggunaan selanjutnya
Pemrograman Dinamis
• biasanya diaplikasikan terhadap masalah optimasi; dimana
masalah tersebut banyak memiliki solusi yang mungkin
• Setiap solusi memiliki nilai, dan digunakan untuk menemukan
solusi dengan nilai optimal (minimum atau maksimum) /solusi
optimal
• Jika perkalian menurut cara : (A1 (A2, A3 )), didapat : Jml perkalian A2.A3:
25.000 + 50.000 = 75.000 perkalian skalar 100x5x50 + 10x100x50
= 25000 + 50000 = 75000
Dimensi :
((A1A2 ) A3 ) =>p0, p1, p2, p3=10,100,5,50
→ (p0xp1),(p1xp2), (p2xp3) Jml perkalian=Jk1 * jb1 * jk2
→ (p0xp2), (p2,p3)
→ (p0xp3) Jml perkalian: ((A1A2 )A3 )
(10x100)(100x5)
Contoh - Dimensi : (10x5) (5x50)
((A1A2 )A3 ) : (10x5)(5x50) --- (10x50) 100x10x5 +10x5x50
(A1 (A2, A3 )): (10x100)(100x50) -- (10x50) =5000 + 2500 = 7500
Menghitung Jumlah Tanda Kurung
• Didefinisikan P(n) : jumlah tanda kurung alternatif dari sekuen
n matriks
• Saat n = 1 : hanya 1 perkalian matriks – hanya 1 cara memberi
tanda kurung produk matriks
• Saat n >= 2, tanda kurung perkalian matriks adalah perkalian
dari dua subperkalian matriks yang diberi tanda kurung, dan
pemisahan / split antara dua subperkalian akan terjadi antara
matriks ke (k) dan (k+1) untuk k=1, 2, .., n-1
• Jumlah total tanda kurung , dengan recurrence :
Contoh 2 –
perkalian rantai-matriks
(matrix-chain Multiplication)
• Dengan berapa cara dapat dilakukan pemberian tanda
kurung untuk perkalian A1A2A3A4 ?
• Dengan 5 cara :
Step 3
Menghitung nilai dari solusi optimal dengan cara bottom-up
• Cara simpel untuk menulis algoritma rekursif berdasarkan recurrence .
Algoritma ini memerlukan waktu eksponensial, tidak lebih baik dari
metode brute-force yang memeriksa tiap cara pemberian tanda kurung
dari perkalian
• Satu observasi penting adalah ada subproblem yang
berbeda. Satu problem untuk tiap pilihan dari i dan j yang memenuhi
1≤i≤j≤n
Pemecahan Problem : Matrix-chain
Multiplication dengan Pemrograman Dinamis
• Algoritma rekursif dapat mengatasi setiap subproblem berkali-kali dalam
cabang yang berbeda dari tree rekursi. Sifat dari subproblem overlapping
adalah hal kedua dari pengaplikasian pemrograman dinamis (hal
pertama adalah substructure optimal)
• Pada step 3, tidak digunakan recurrence; paradigma pemrograman
dinamis menghitung cost optimal menggunakan tabel dengan
pendekatan bottom-up