540 likes | 2.4k Views
Pertemuan 14 DYNAMIC PROGRAMMING : COIN CHANGE PROBLEM. Matakuliah : T0034 / Perancangan & Analisis Algoritma Tahun : 2008. UANG LOGAM. Pecahan uang logam Indonesia 25 50 100 200 500 1000 Kembalian senilai 750 bisa didapat dari : 1 keping 500, 2 keping 100, 1 keping 50
E N D
Pertemuan 14DYNAMIC PROGRAMMING :COIN CHANGE PROBLEM Matakuliah : T0034 / Perancangan & Analisis Algoritma Tahun : 2008
UANG LOGAM • Pecahan uang logam Indonesia • 25 • 50 • 100 • 200 • 500 • 1000 • Kembalian senilai 750 bisa didapat dari : • 1 keping 500, 2 keping 100, 1 keping 50 • 7 keping 100, 1 keping 50 • 5 keping 100, 3 keping 50 • dan masih banyak lagi kombinasi lainnya • Bagaimana caranya memberikan uang kembalian 835?
VARIASI COIN CHANGE PROBLEM • Misalkan di sebuah negara hanya ada pecahan uang logam C1, C2 dan C3. • Maka terdapat 3 variasi Coin Change Problem : • Apakah kembalian X bisa dibentuk dari pecahan-pecahan tersebut? • Ada berapa koin minimal untuk membentuk X? • Ada berapa kombinasi cara untuk membentuk nilai X? [buku utama, bab 7.3]
CONTOH KASUS • Di sebuah negara hanya terdapat uang logam bernilai 3, 5 dan 12. • Apakah kembalian 23 bisa dibentuk dari pecahan-pecahan tersebut? • Ada berapa koin minimal untuk membentuk nilai kembalian 23? • Ada berapa kombinasi cara untuk membentuk nilai 23?
KASUS 1 • Model matematika : • f(3) = true • f(5) = true • f(12) = true • f(x) = false untuk x <0 • f(n) = f(n-3) OR f(n-5) OR f(n-12) • Metode Pull • Jika kita ingin tahu apakah X bisa dibentuk, kita perlu tahu apakah X-3 atau X-5 atau X-12 bisa dibentuk • Metode Push • Jika nilai X bisa dibentuk, maka nilai X+3, X+5 dan X+12 bisa dibentuk
1 iNilaiCari=23 2 iMaxCari=25 3 iJumKoin=3 4 koin[1]=3 5 koin[2]=5 6 koin[3]=12 7 for i=1 to iMaxCari do 8 C[i]=”X” 9 end for 10 for j=1 to iJumKoin do 11 C[koin[j]]=”B” 12 end for 13 for n=1 to iMaxCari do 14 for j=1 to iJumKoin do 15 if (n-koin[j])>=1 then 16 if C[n-koin[j]]=”B” then 17 C[n]=”B” 18 end if 19 end if 20 end for 21 end for 22 if C[iNilaiCari]=”B” then 23 bBisaDicari=true 24 else 25 bBisaDicari=false 26 end if PSEUDOCODE KASUS 1 [buku utama, pseudocode 7.4a]
HASIL KASUS 1 • Kolom 23 berisi tanda “B”, berarti nilai uang kembalian 23 bisa dibentuk dari koin-koin 3, 5 dan 12 • Pelajari penjelasan rinci pada ilustrasi 7.4a tentang cara kerja algoritma
KASUS 2 • Model matematika : • f(23) = min { f(20), f(18), f(11) } + 1 • f(n) = min { f(n-3), f(n-5), f(n-12) } + 1 • Metode Pull • Jumlah minimal koin untuk membentuk nilai X didapat dari 1 ditambah jumlah koin minimal untuk membentuk nilai X-3 atau X-5 atau X-12 (diambil yang lebih kecil) • Metode Push • Jika nilai X bisa dibentuk dengan Y koin, maka nilai X+3, X+5, X+12 bisa dibentuk dengan Y+1 koin
PSEUDOCODE KASUS 2 1 iNilaiCari=23 2 iMaxCari=25 3 iJumKoin=3 4 koin[1]=3 5 koin[2]=5 6 koin[3]=12 7 for i=1 to iMaxCari do 8 C[i]=0 9 end for 10 for j=1 to iJumKoin do 11 C[koin[j]]=1 12 end for 13 for n=1 to iMaxCari do 14 for j=1 to iJumKoin do 15 if ((n-koin[j])>=1) AND (C[n-koin[j]]>0) then 16 if (C[n]=0) OR (C[n]>(1+C[n-koin[j]])) then 17 C[n]=1+C[n-koin[j]] 18 end if 19 end if 20 end for 21 end for 22 if C[iNilaiCari]>0 then 23 bBisaDicari=true 24 iJumKoinMinimal=C[iNilaiCari] 25 else 26 bBisaDicari=false 27 end if [buku utama, pseudocode 7.5a]
HASIL KASUS 2 • Kolom 23 berisi angka 4, berarti nilai uang kembalian 23 bisa dibentuk dari koin-koin 3, 5 dan 12 dengan jumlah koin minimal sebanyak 4 keping uang logam • Pelajari penjelasan rinci pada ilustrasi 7.5a tentang cara kerja algoritma
KASUS 3 • Model matematika : • f(23) = f(20) + f(18) + f(11) • f(n) = f(n-3) + f(n-5) + f(n-12) • Banyaknya kombinasi untuk membentuk nilai X adalah jumlah dari kombinasi yang dapat membentuk nilai X-3, X-5 dan X-12
PSEUDOCODE KASUS 3 1 iNilaiCari=23 2 iMaxCari=25 3 iJumKoin=3 4 koin[1]=3 5 koin[2]=5 6 koin[3]=12 7 for i=1 to iMaxCari do 8 C[i]= 0 9 end for 10 for j=1 to iJumKoin do 11 C[koin[j]]=1 12 end for 13 for n=1 to iMaxCari do 14 for j=1 to iJumKoin do 15 if (n-koin[j])>=1 then 16 C[n]=C[n]+C[n-koin[j]] 17 end if 18 end for 19 end for 20 if C[iNilaiCari]>0 then 21 bBisaDicari=true 22 iJumKemungkinan=C[iNilaiCari] 23 else 24 bBisaDicari=false 25 end if [buku utama, pseudocode 7.6]
HASIL KASUS 3 • Kolom 23 berisi angka 24, berarti nilai uang kembalian 23 bisa dibentuk dari koin-koin 3, 5 dan 12 dengan total kemungkinan kombinasi sebanyak 24 kombinasi • Pelajari penjelasan rinci pada ilustrasi 7.6 tentang cara kerja algoritma
LATIHAN • Semua pseudocode Coin Chage Problem yang dijelaskan pada pertemuan ini menggunakan metode pull. Untuk setiap kasus, buatlah pseudocode dengan metode push!
REVIEW • Apa yang sudah dipahami? • Apa yang akan dibahas selanjutnya?