My first Magazine pemrograman-kompetitif-dasar | Page 66
6
Greedy
Greedy merupakan sebuah teknik dalam strategi penyelesaian masalah, bukan suatu algo-
ritma khusus. Teknik greedy biasanya memiliki waktu eksekusi yang cepat dan biasanya mudah
untuk diimplementasikan, namun terkadang sulit dibuktikan kebenarannya. Pada bab ini kita
akan mempelajari cara greedy bekerja melalui pembahasan permasalahan greedy klasik: Activity
Selection .
6.1
Konsep Greedy
Suatu persoalan dapat diselesaikan dengan teknik greedy jika persoalan tersebut memiliki
memiliki sifat berikut:
• Solusi optimal dari persoalan dapat ditentukan dari solusi optimal subpersoalan tersebut.
• Pada setiap subpersoalan, ada suatu langkah yang bisa dilakukan yang mana langkah
tersebut menghasilkan solusi optimal pada subpersoalan tersebut. Langkah ini disebut
juga greedy choice .
Untuk menguasai teknik greedy , diperlukan banyak latihan. Sebagai awalan, kita akan
mempelajari salah satu permasalahan greedy klasik yang biasa disebut Activity Selection .
Contoh Soal 6.1: Activity Selection
Anda diberikan N buah aktivitas. Aktivitas ke-i dinyatakan dalam ha i .start, a i .endi. Artinya,
aktivitas ini dimulai pada waktu a i .start dan berakhir pada waktu a i .end. Pada setiap
satuan waktu, Anda dapat mengikuti paling banyak satu aktivitas. Dengan kata lain, Anda
dapat mengikuti dua aktivitas i dan j jika a i .end ≤ a j .start atau a j .end ≤ a i .start. Anda ingin
mengatur jadwal sedemikian sehingga Anda bisa mengikuti aktivitas sebanyak mungkin.
Contoh
Aktivitas: [h1, 3i, h2, 6i, h5, 7i, h8, 9i]
Solusi: Anda dapat hadir di 3 aktivitas berbeda yang tidak saling tumpang tindih, yaitu h1, 3i,
h5, 7i, dan h8, 9i
6.2
Menemukan Subpersoalan
Langkah awal dalam menyelesaikan permasalahan dengan teknik greedy adalah memastikan
bahwa soal dapat dipecah menjadi subpersoalan yang lebih kecil.
56