Apa itu Algoritma Greedy?
Algoritma Greedy (Rakus) adalah suatu metode penyelesaian masalah dengan cara memilih keputusan
terbaik (optimal) pada setiap langkah kecil, tanpa mempertimbangkan dampak jangka panjang dari keputusan tersebut.
Prinsip:
- Pada setiap tahap, algoritma akan memilih opsi yang terlihat paling menguntungkan saat itu.
- Dengan selalu mengambil pilihan terbaik lokal (local optimum), hasil akhirnya diharapkan juga menjadi solusi terbaik global (global optimum).
Mengapa disebut "Rakus"?
Disebut rakus karena algoritma ini selalu "serakah", yaitu langsung mengambil pilihan terbaik yang tersedia pada saat itu tanpa menunggu atau memikirkan konsekuensi ke depannya.
- Seperti orang yang rakus: begitu ada sesuatu yang menguntungkan di depan mata, langsung diambil.
- Kadang cara ini berhasil memberikan solusi optimal, tapi ada juga kasus di mana hasilnya hanya mendekati optimal (bukan benar-benar terbaik).
Contoh penyelesaian kasus Traveling Sales Problem(TSP) dengan Algoritma Greedy
Masalah: Ada seorang sales yang harus mengunjungi semua kota (A, B, C, D, E) sekali saja, lalu pulang ke kota awal (A). Dia ingin mencari rute dengan jarak paling pendek.
Data jarak antar kota:
- A ke B = 2 km, A ke C = 9 km, A ke D = 10 km, A ke E = 7 km
- B ke C = 6 km, B ke D = 4 km, B ke E = 3 km
- C ke D = 8 km, C ke E = 5 km
- D ke E = 6 km
Penyelesaian Rute dengan Algoritma Greedy (Nearest-Neighbor)
- Mulai dari A: tujuan terdekat adalah B (2 km).
Rute: A → B
Total Jarak: 2
- Dari B: kota terdekat adalah E (3 km).
Rute: A → B → E
Total Jarak: 5
- Dari E: pilih C (5 km).
Rute: A → B → E → C
Total Jarak: 10
- Dari C: tersisa D (8 km).
Rute: A → B → E → C → D
Total Jarak: 18
- Kembali ke A: dari D ke A (10 km).
Rute: A → B → E → C → D → A
Total Jarak: 28
Hasil Akhir
Jadi, rute yang ditemukan menggunakan algoritma greedy dengan titik awal di A adalah:
A → B → E → C → D → A
Total jarak tempuh untuk rute ini adalah 28 km.
PSEUDOCODE
Algoritma Greedy_TSP
Input : Graf dengan himpunan kota {A, B, C, D, E} dan jarak antar kota
Output : Rute perjalanan terpendek menurut algoritma greedy
- Mulai dari kota awal ( A)
- Tandai kota awal sebagai "sudah dikunjungi"
- kota_sekarang ← A
- total_jarak ← 0
- rute ← [A]
- Selama masih ada kota yang belum dikunjungi:
- Dari kota_sekarang, cari kota terdekat yang belum dikunjungi
- Pindah ke kota tersebut
- Tambahkan kota tersebut ke dalam rute
- Tambahkan jaraknya ke total_jarak
- Tandai kota tersebut sebagai "sudah dikunjungi"
- kota_sekarang ← kota terpilih
- Setelah semua kota dikunjungi:
- Kembali ke kota awal (A)
- Tambahkan jaraknya ke total_jarak
- Tambahkan A ke dalam rute
- Tampilkan rute dan total_jarak
- Selesai
CONTOH KODE JAVA
public class TSPGreedy {
static int jumlahKota= 5; // jumlah kota
static String[] kota = {"A", "B", "C", "D", "E"};
public static void main(String[] args) {
// Matriks jarak antar kota
int[][] jarak = {
{0, 2, 9, 10, 7}, // A
{2, 0, 6, 4, 3}, // B
{9, 6, 0, 8, 5}, // C
{10, 4, 8, 0, 6}, // D
{7, 3, 5, 6, 0} // E
};
int start = 0; // mulai dari kota A (indeks 0)
boolean[] dikunjungi = new boolean[jumlahKota];
dikunjungi[start] = true;
int totalJarak = 0;
int sekarang= start;
System.out.print("Rute: " + kota[start]);
// kunjungi semua kota sekali
for (int step = 1; step < jumlahKota; step++) {
int nextKota = -1;
int minJarak = Integer.MAX_VALUE;
// cari kota terdekat yang belum dikunjungi
for (int j = 0; j < jumlahKota; j++) {
if (!dikunjungi[j] && jarak[sekarang][j] < minJarak) {
minJarak = jarak[sekarang][j];
nextKota = j;
}
}
// pergi ke kota terdekat
dikunjungi[nextKota] = true;
totalJarak += minJarak;
System.out.print(" → " + kota[nextKota]);
sekarang = nextKota;
}
// kembali ke kota awal
totalJarak += jarak[sekarang][start];
System.out.print(" → " + kota[start]);
// hasil total jarak
System.out.println("\nTotal jarak: " + totalJarak + " km");
}
}
HASIL RUN PROGRAM
Komentar
Posting Komentar