Ketika datang ke desain algoritma, orang sering menggunakan teknik berikut:
- Pemrograman Dinamis
- Strategi Serakah
- Membagi dan menaklukkan
Sementara untuk dua metode pertama, ada dasar-dasar teoretis yang terkenal, yaitu Prinsip Optimalitas Bellman dan teori matroid (resp. Greedoid), saya tidak dapat menemukan kerangka kerja umum untuk algoritma berdasarkan D&C.
Pertama, saya menyadari sesuatu yang kami (atau lebih tepatnya, prof) perkenalkan di kelas pemrograman fungsional, yang disebut "kerangka algoritmik", yang muncul dalam konteks combinator. Sebagai contoh perjanjian ini, kami memberikan kerangka kerja untuk algoritma D&C sebagai berikut:
Definisi : Misalkan adalah perangkat yang tidak kosong. Kami menyebut elemen solusi S , dan elemen P : = P ( A ) (yaitu, himpunan bagian A ) disebut sebagai masalah . Kemudian, kerangka D & C adalah tupel 4 ( P β , β , D , C ) , di mana:
- adalah predikat atas serangkaian masalah dan kami mengatakan bahwa masalah p adalahdasarjika P β ( p ) berlaku.
- adalah pemetaan P β → S yang memberikan solusi untuk setiap masalah dasar.
- adalah pemetaan P → P ( P ) yang membagi setiap masalah menjadi satu set submasalah.
- adalah pemetaan P × P ( S ) → S yang menggabungkan solusi (tergantung pada jenis "masalah pivot") dari subproblem untuk menghasilkan solusi.
Kemudian, untuk kerangka yang diberikan dan masalah p , fungsi generik berikut f s : P → S menghitung solusi (dalam pengertian formal) untuk p :
di mana pada baris kedua kita menggunakan notasi untuk himpunan bagian X dari kodomain pemetaan f .
Namun, kami tidak meneliti lebih lanjut sifat masalah "struktural" yang mendasarinya yang dapat dirumuskan dengan cara ini (seperti yang saya katakan, itu adalah kelas pemrograman fungsional dan ini hanya contoh kecil). Sayangnya, saya tidak dapat menemukan referensi lebih lanjut tentang pendekatan ini. Karenanya saya tidak berpikir definisi di atas cukup standar. Jika seseorang mengenali apa yang telah saya nyatakan di atas, saya akan senang tentang artikel terkait.
Kedua, untuk strategi serakah kami memiliki hasil yang terkenal bahwa masalah diselesaikan dengan benar oleh algoritma serakah umum jika dan hanya jika solusinya merupakan matroid tertimbang. Apakah ada hasil yang serupa untuk algoritma D & C (tidak harus berdasarkan metode yang diuraikan di atas)?
sumber