My first Magazine pemrograman-kompetitif-dasar | Page 76

7 Dynamic Programming Algoritma 29 Penyelesaian Coin Change secara bottom-up . function SOLVE () 2: f [0] ← 0 1: 3: 4: 5: 6: 7: 8: 9: 10: 11: for x ← 1, N do best ← ∞ for k ← 1, M do if (a k ≤ x) then best ← min(best, f [x − a k ] + 1) end if end for f [x] ← best end for return f [N] 13: end function 12: Dengan mudah Anda dapat memperhatikan bahwa kompleksitas solusi dengan bottom- up pada Algoritma 29 adalah O(NM). Kompleksitas ini sama seperti dengan cara top-down . Kenyataannya, sebenarnya keduanya merupakan algoritma yang sama, hanya berbeda di arah pencarian jawaban. Pengisian Tabel Cara bottom-up yang dijelaskan sebelumnya terkesan seperti "mengisi tabel". Pada bagian ini, kita akan coba simulasikan bottom-up untuk menghitung f (12) dengan nominal koin 1, 6, dan 10 rupiah. Mula-mula, kita memiliki tabel f (x) untuk nilai x dari 0 sampai 12, seperti pada Tabel 7.1. Tabel 7.1: Tahap 1: Siapkan tabel untuk menyimpan nilai f . Mula-mula tabel tersebut kosong. x 0 1 2 3 4 5 6 7 8 9 10 11 12 f (x) Tabel 7.2: Tahap 2: Isi base case yaitu f (0) = 0. x 0 1 2 3 4 5 6 7 8 9 10 11 f (x) 0 12 Berikutnya, kita akan mengisi f (1). Satu-satunya pilihan adalah menukarkan dengan koin 1, karena kita tidak bisa menggunakan koin 6 atau 10. Maka f (1) = f (1 − 1) + 1 = f (0) + 1. Dengan demikian, nilai tabel akan menjadi seperti pada Tabel 7.3. Tabel 7.3: Tahap 3: Isi tabel setelah pengisian f (1). x 0 1 2 3 4 5 6 7 8 9 10 11 12 f (x) 0 1 Hal serupa terjadi ketika kita mengisi f (2), f (3), f (4), dan f (5). Satu-satunya pilihan adalah 66