Metode/Algoritma Greedy merupakan algoritma yang membentuk solusi
langkah per langkah. Pada setiap langkah tersebut akan dipilih keputusan
yang paling optimal. Keputusan tersebut tidak perlu memperhatikan
keputusan selanjutnya yang akan diambil, dan keputusan tersebut tidak
dapat diubah lagi pada langkah selanjutnya.
a. Prinsip Utama Algoritma Greedy
Prinsip utama algoritma greedy adalah ?take what you can get now!?.
Maksud dari prinsip tersebut adalah sebagai berikut: Pada setiap langkah
dalam algoritma greedy, kita ambil keputusan yang paling optimal untuk
langkah tersebut tanpa memperhatikan konsekuensi pada langkah
selanjutnya. Kita namakan solusi tersebut dengan optimum lokal. Kemudian
saat pengambilan nilai optimum lokal pada setiap langkah, diharapkan
tercapai optimum global, yaitu tercapainya solusi optimum yang
melibatkan keseluruhan langkah dari awal sampai akhir.
b. Elemen Algoritma Greedy
Elemen-elemen yang digunakan dalam penerapan algoritma greedy antara lain :
1. Himpunan Kandidat
Himpunan yang berisi elemen pembentuk solusi.
2. Himpunan Solusi
Himpunan yang terpilih sebagai solusi persoalan.
3. Fungsi Seleksi
Fungsi yang memilih kandidat yang paling mungkin untuk mencapai solusi optimal.
4. Fungsi Kelayakan
Fungsi yang memeriksa apakah suatu kandidat yang dipilih dapat
memberikan solusi yang layak. Maksudnya yaitu apakah kandidat tersebut
bersama dengan himpunan solusi yang sudah terbentuk tidak melanggar
kendala yang ada.
5. Fungsi Solusi
Fungsi yang mengembalikan nilai boolean. True jika himpunan solusi yang
sudah tebentuk merupakan solusi yang lengkap; False jika himpunan solusi
belum lengkap.
6. Fungsi Objektif
Fungsi yang mengoptimalkan solusi.
c. Skema Umum Algoritma Greedy
Misal kita mengasumsikan elemen algoritma greedy sebagai berikut :
Himpunan Kandidat = C,
Himpunan Solusi = S,
Fungsi Seleksi = select(),
Fungsi Kelayakan = feasible(),
Fungsi Solusi = solution(), dan
Fungsi Obyektif = objective().
Skema umum dari algoritma greedy dapat kita tuliskan :
- Inisialisasi S dengan kosong.
- Pilih sebuah kandidat dari C (dengan select()).
- Kurangi C dengan kandidat yang telah terpilih di atas.
- Periksa apakah kandidat yang dipilih tersebut bersama ? sama dengan S
membentuk solusi yang layak (dengan feasible()). Jika ya, masukkan
kandidat ke S; jika tidak buang kandidat tersebut dan tidak perlu
ditelaah lagi.
- Periksa apakah S yang sudah terbentuk telah memberikan solusi yang
lengkap (dengan solution()). Jika ya, berhenti; jika tidak, ulangi dari
langkah 2.
Contoh 1 (Masalah Penukaran uang):
Persoalan: Diberikan uang senilai A. Tukar A dengan koin-koin uang yang ada. Berapa jumlah minimum koin yang diperlukan untuk penukaran tersebut?
Contoh: tersedia koin-koin 1, 5, 10, dan 25
Uang senilai 32 dapat ditukar dengan cara berikut:
32 = 1 + 1 + … + 1 (32 koin)
32 = 5 + 5 + 5 + 5 + 10 + 1 + 1 (7 koin)
32 = 10 + 10 + 10 + 1 + 1 (5 koin)
… dan seterusnya
Minimum: 32 = 25 + 5 + 1 + 1 ) hanya 4 koin
Strategi greedy yang digunakan adalah:
Pada
setiap langkah, pilihlah koin dengan nilai sebesar mungkin dari
himpunan koin yang tersisa dengan syarat (kendala) tidak melebihi nilai
uang yang ditukarkan.
Tinjau masalah menukarkan uang 32 dengan koin 1, 5, 10, dan 25:
Langkah 1: pilih 1 buah koin 25 (Total = 25)
Langkah 2: pilih 1 buah koin 5 (Total = 25 + 5 = 30)
Langkah 3: pilih 2 buah koin 1 (Total = 25+5+1+1= 32)
Solusi: Jumlah koin minimum = 4 (solusi optimal!)
Pada
setiap langkah di atas kita memperoleh optimum lokal, dan pada akhir
algoritma kita memperoleh optimum global (yang pada contoh ini merupakan
solusi optimum).
Skema Umum Algoritma Greedy
Algoritma greedy disusun oleh elemen-elemen berikut:
1. Himpunan kandidat.
Berisi elemen-elemen pembentuk solusi.
2. Himpunan solusi
Berisi kandidat-kandidat yang terpilih sebagai solusi persoalan.
3. Fungsi seleksi (selection function)
Memilih
kandidat yang paling memungkinkan mencapai solusi optimal. Kandidat
yang sudah dipilih pada suatu langkah tidak pernah dipertimbangkan lagi
pada langkah selanjutnya.
4. Fungsi kelayakan (feasible)
Memeriksa
apakah suatu kandidat yang telah dipilih dapat memberikan solusi yang
layak, yakni kandidat tersebut bersama-sama dengan himpunan solusi yang
sudah terbentuk tidak melanggar kendala (constraints)
yang ada. Kandidat yang layak dimasukkan ke dalam himpunan solusi,
sedangkan kandidat yang tidak layak dibuang dan tidak pernah
dipertimbangkan lagi.
5. Fungsi
obyektif, yaitu fungsi yang memaksimumkan atau meminimumkan nilai
solusi (misalnya panjang lintasan, keuntungan, dan lain-lain).
Contoh pada masalah penukaran uang, elemen-elemen algoritma greedy-nya adalah:
1. Himpunan
kandidat: himpunan koin yang merepresentasikan nilai 1, 5, 10, 25,
paling sedikit mengandung satu koin untuk setiap nilai.
2. Himpunan solusi: total nilai koin yang dipilih tepat sama jumlahnya dengan nilai uang yang ditukarkan.
3. Fungsi seleksi: pilihlah koin yang bernilai tertinggi dari himpunan kandidat yang tersisa.
4. Fungsi layak: memeriksa apakah nilai total dari himpunan koin yang dipilih tidak melebihi jumlah uang yang harus dibayar.
5. Fungsi obyektif: jumlah koin yang digunakan minimum.
Pseudo-code algoritma greedy adalah sebagai berikut: