My first Magazine pemrograman-kompetitif-dasar | Page 71

6.6 Pembuktian Greedy Contoh Soal 6.2: Penukaran Uang Anda ingin menukar uang Rp12.000 dengan lembaran uang kertas Rp5.000, Rp2.000, dan Rp1.000. Anda ingin menukar dengan jumlah lembaran sesedikit mungkin. Pada soal tersebut, greedy choice yang terpikirkan adalah dengan memilih lembaran dengan nominal terbesar yang mungkin untuk tiap subpersoalan. Pertama kita pilih lembaran Rp5.000, sehingga tersisa Rp7.000 lagi yang harus dipecah. Selanjutnya kita pilih Rp5.000 lagi dan menyisakan Rp2.000 untuk dipecah. Akhirnya, kita pilih Rp2.000 sebagai pecahan terakhir. Solusi dari kasus ini adalah dengan menggunakan 3 lembaran. Dengan soal yang sama, bagaimana jika lembaran rupiah yang beredar bernilai Rp5.000, Rp4.000, dan Rp1.000? Dengan algoritma greedy , kita akan menukar Rp12.000 dengan lembaran Rp5.000, Rp5.000, Rp1.000, dan Rp1.000. Padahal ada solusi yang lebih baik, yaitu menggunakan 3 lembaran Rp4.000. Pada kasus tersebut, greedy choice yang tidak selalu dapat menghasilkan solusi optimal. Permasalahan ini tidak dapat diselesaikan oleh algoritma greedy . Permasalahan ini bisa diselesaikan dengan algoritma dynamic programming, yang akan dibahas pada Bab 7. 6.6 Pembuktian Greedy Biasanya akan ada beberapa pilihan greedy choice yang ada, yang mana tidak semuanya bisa menghasilkan solusi optimal. Ketika menemukan suatu greedy choice , sangat dianjurkan untuk menguji kebenaran dari pilihan tersebut sebelum diimplementasikan. Namun, pembuktian kebenaran algoritma greedy tidaklah mudah. Pengujian yang dapat dilakukan adalah dengan mencoba membuat contoh kasus yang dapat menggagalkan greedy choice tersebut. Teknik ini biasa disebut proof by counterexample. Jika ditemukan satu saja contoh kasus yang mana greedy choice yang diajukan tidak menghasilkan solusi optimal, maka greedy choice tersebut dinyatakan salah. Namun, bila Anda tidak bisa menemukan counterexample, belum tentu algoritma Anda benar. Algoritma greedy terkadang mudah untuk dipikirkan dan mudah untuk diimplementasikan, namun sulit untuk dibuktikan kebenarannya. Pembuktian kebenaran algoritma greedy bisa jadi membutuhkan pembuktian matematis yang kompleks dan memakan waktu. Oleh karena itu, pada suasana kompetisi, intuisi dan pengalaman sangat membantu untuk menyelesaikan soal bertipe greedy . Berhati-hati dan teliti saat mengerjakan soal bertipe greedy . Perhatikan setiap detil yang ada, karena bisa berakibat fatal. 61