download

Matakuliah
Tahun
: T0034 / Perancangan & Analisis Algoritma
: 2008
Pertemuan 14
DYNAMIC PROGRAMMING :
COIN CHANGE PROBLEM
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?
Bina Nusantara
VARIASI COIN CHANGE PROBLEM
• Misalkan di sebuah negara hanya ada pecahan
uang logam C1, C2 dan C3.
• Maka terdapat 3 variasi Coin Change Problem :
1. Apakah kembalian X bisa dibentuk dari pecahanpecahan tersebut?
2. Ada berapa koin minimal untuk membentuk X?
3. Ada berapa kombinasi cara untuk membentuk nilai X?
[buku utama, bab 7.3]
Bina Nusantara
CONTOH KASUS
• Di sebuah negara hanya terdapat uang logam
bernilai 3, 5 dan 12.
1. Apakah kembalian 23 bisa dibentuk dari pecahanpecahan tersebut?
2. Ada berapa koin minimal untuk membentuk nilai
kembalian 23?
3. Ada berapa kombinasi cara untuk membentuk
nilai 23?
Bina Nusantara
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
Bina Nusantara
PSEUDOCODE KASUS 1
1
2
3
4
5
6
7
8
9
10
11
12
iNilaiCari=23
iMaxCari=25
iJumKoin=3
koin[1]=3
koin[2]=5
koin[3]=12
for i=1 to iMaxCari do
C[i]=”X”
end for
for j=1 to iJumKoin do
C[koin[j]]=”B”
end for
13
14
15
16
17
18
19
20
21
22
23
24
25
26
for n=1 to iMaxCari do
for j=1 to iJumKoin do
if (n-koin[j])>=1 then
if C[n-koin[j]]=”B” then
C[n]=”B”
end if
end if
end for
end for
if C[iNilaiCari]=”B” then
bBisaDicari=true
else
bBisaDicari=false
end if
[buku utama, pseudocode 7.4a]
Bina Nusantara
HASIL KASUS 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
X
X
B
X
B
B
X
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
B
• 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
Bina Nusantara
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
Bina Nusantara
PSEUDOCODE KASUS 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
iNilaiCari=23
iMaxCari=25
iJumKoin=3
koin[1]=3
koin[2]=5
koin[3]=12
for i=1 to iMaxCari do
C[i]=0
end for
for j=1 to iJumKoin do
C[koin[j]]=1
end for
for n=1 to iMaxCari do
for j=1 to iJumKoin do
if ((n-koin[j])>=1) AND (C[n-koin[j]]>0) then
if (C[n]=0) OR (C[n]>(1+C[n-koin[j]])) then
C[n]=1+C[n-koin[j]]
end if
end if
end for
end for
if C[iNilaiCari]>0 then
bBisaDicari=true
iJumKoinMinimal=C[iNilaiCari]
else
bBisaDicari=false
end if
Bina Nusantara
[buku utama, pseudocode 7.5a]
HASIL KASUS 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
0
0
1
0
1
2
0
2
3
2
3
1
3
4
2
4
2
3
5
3
4
3
4
2
4
• 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
Bina Nusantara
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
Bina Nusantara
PSEUDOCODE KASUS 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
iNilaiCari=23
iMaxCari=25
iJumKoin=3
koin[1]=3
koin[2]=5
koin[3]=12
for i=1 to iMaxCari do
C[i]= 0
end for
for j=1 to iJumKoin do
C[koin[j]]=1
end for
for n=1 to iMaxCari do
for j=1 to iJumKoin do
if (n-koin[j])>=1 then
C[n]=C[n]+C[n-koin[j]]
end if
end for
end for
if C[iNilaiCari]>0 then
bBisaDicari=true
iJumKemungkinan=C[iNilaiCari]
else
bBisaDicari=false
end if
Bina Nusantara
[buku utama, pseudocode 7.6]
HASIL KASUS 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
0
0
1
0
1
1
0
2
1
1
3
2
3
4
4
6
7
8
10
13
15
18
24
27
34
• 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
Bina Nusantara
LATIHAN
• Semua pseudocode Coin Chage Problem yang
dijelaskan pada pertemuan ini menggunakan
metode pull. Untuk setiap kasus, buatlah
pseudocode dengan metode push!
Bina Nusantara
REVIEW
• Apa yang sudah dipahami?
• Apa yang akan dibahas selanjutnya?
Bina Nusantara