Anda di halaman 1dari 13

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?


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 pecahan-
pecahan tersebut?
2. Ada berapa koin minimal untuk membentuk X?
3. 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.

1. Apakah kembalian 23 bisa dibentuk dari pecahan-


pecahan tersebut?
2. Ada berapa koin minimal untuk membentuk nilai
kembalian 23?
3. 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)

• Jika kita ingin tahu apakah X bisa dibentuk, kita


perlu tahu apakah X-3 atau X-5 atau X-12 bisa
dibentuk
PSEUDOCODE KASUS 1
1 iNilaiCari=23 13 for n=1 to iMaxCari do
2 iMaxCari=25 14 for j=1 to iJumKoin do
3 iJumKoin=3 15 if (n-koin[j])>=1 then
4 koin[1]=3 16 if C[n-koin[j]]=”B” then
5 koin[2]=5 17 C[n]=”B”
6 koin[3]=12 18 end if
7 for i=1 to iMaxCari do 19 end if
8 C[i]=”X” 20 end for
9 end for 21 end for
10 for j=1 to iJumKoin do 22 if C[iNilaiCari]=”B” then
11 C[koin[j]]=”B” 23 bBisaDicari=true
12 end for 24 else
25 bBisaDicari=false
26 end if

[buku utama, pseudocode 7.4a]


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
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

• 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)
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 [buku utama, pseudocode 7.5a]
27 end if
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
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

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

Anda mungkin juga menyukai