My first Magazine pemrograman-kompetitif-dasar | Page 88

7 Dynamic Programming Algoritma 38 Solusi Memotong Kayu menggunakan top-down . 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: function SOLVE (`, r) if (` > r) then return 0 end if if computed[`][r] then return memo[`][r] end if best ← ∞ cost ← L[r + 1] − L[` − 1] for m ← `, r do best ← min(best, SOLVE (`, m − 1) + SOLVE (m + 1, r) + cost) end for computed[`][r] ← true memo[`][r] ← best return best end function Jawaban akhirnya ada pada SOLVE (1, N). Solusi Bottom-Up Algoritma 39 Solusi Memotong Kayu menggunakan bottom-up . 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: function SOLVE () . Base case for ` ← 0, N + 1 do for r ← 0, ` − 1 do d p[`][r] ← 0 end for end for . Isi "tabel" mulai dari kasus yang kecil for gap ← 0, N − 1 do for ` ← 1, N − gap do r ← ` + gap best ← ∞ cost ← L[r + 1] − L[` − 1] for m ← `, r do best ← min(best, d p[`][m − 1] + d p[m + 1][r] + cost) end for d p[`][r] ← best end for end for return d p[1][N] end function Perhatikan bahwa implementasi metode bottom-up lebih rumit dibandingkan dengan imple- mentasi top-down . Hal ini dikarenakan pengisian "tabel" dilakukan secara "tidak biasa". Pada 78