Dalam dunia komputasi dan ilmu data, efisiensi sering kali menjadi kunci. Ketika dihadapkan pada masalah yang kompleks, mencari solusi terbaik terkadang memerlukan waktu dan sumber daya yang signifikan. Di sinilah algoritma greedy hadir sebagai salah satu pendekatan yang paling populer dan seringkali efektif.
Algoritma greedy, secara harfiah berarti "rakus" atau "serakah", adalah sebuah paradigma algoritma yang membuat pilihan terbaik pada setiap langkah, dengan harapan bahwa pilihan-pilihan lokal yang optimal ini akan mengarah pada solusi global yang optimal. Sederhananya, algoritma ini tidak pernah melihat ke masa depan atau meninjau kembali keputusan yang sudah diambil. Ia hanya fokus pada apa yang tampak paling menguntungkan pada momen tersebut.
Prinsip dasar algoritma greedy adalah melakukan pilihan yang paling tampak menguntungkan di setiap iterasi. Proses ini berlanjut hingga masalah selesai diselesaikan.
Meskipun terdengar sederhana, pendekatan greedy memiliki berbagai aplikasi praktis yang luas:
Salah satu contoh klasik adalah bagaimana kita menukarkan uang. Jika kita ingin memberikan kembalian sebesar Rp. 7.500 dengan denominasi koin Rp. 5.000, Rp. 2.000, dan Rp. 1.000, algoritma greedy akan memilih koin terbesar terlebih dahulu yang tidak melebihi jumlah yang dibutuhkan. Dalam kasus ini, algoritma akan memilih satu koin Rp. 5.000, lalu satu koin Rp. 2.000, dan terakhir satu koin Rp. 1.000. Pendekatan ini biasanya menghasilkan jumlah koin paling sedikit.
Algoritma Dijkstra digunakan untuk menemukan jalur terpendek dari satu simpul ke simpul lain dalam sebuah graf. Pada setiap langkah, algoritma ini memilih simpul terdekat yang belum dikunjungi. Ini adalah contoh sempurna dari strategi greedy, di mana pilihan lokal (memilih simpul terdekat) mengarah pada solusi global (jalur terpendek).
Misalkan Anda memiliki serangkaian kegiatan, masing-masing dengan waktu mulai dan selesai, dan Anda ingin memilih jumlah maksimum kegiatan yang dapat Anda lakukan tanpa ada yang tumpang tindih. Algoritma greedy akan memilih kegiatan yang paling cepat selesai terlebih dahulu, lalu mencari kegiatan selanjutnya yang dimulai setelah kegiatan pertama selesai, dan seterusnya.
Meskipun implementasinya lebih kompleks, prinsip greedy sangat mendasar dalam pembentukan pohon Huffman. Algoritma ini berulang kali menggabungkan dua simpul dengan frekuensi terendah untuk membentuk simpul baru, hingga semua simpul tergabung dalam satu pohon. Ini bertujuan untuk menghasilkan kode yang lebih pendek untuk karakter yang lebih sering muncul.
Algoritma greedy menawarkan beberapa keuntungan signifikan:
Berikut adalah ilustrasi pseudocode untuk masalah penukaran uang:
FUNGSI GreedyCoinChange(jumlah, koin):
hasil = []
urutanKoin = urutkan koin dari terbesar ke terkecil
UNTUK SETIAP koin DALAM urutanKoin:
SdLmkKoin = jumlah / koin (pembagian integer)
UNTUK i DARI 1 SAMPAI SdLmkKoin:
tambahkan koin ke hasil
kurangi jumlah dengan koin
KEMBALIKAN hasil
Secara keseluruhan, algoritma greedy adalah alat yang sangat berharga dalam perangkat pengembang dan ilmuwan data. Dengan kemampuannya untuk memberikan solusi yang cepat dan seringkali cukup baik, ia menjadi pilihan utama untuk berbagai jenis masalah optimasi di mana kecepatan dan kesederhanaan menjadi prioritas.