Saya telah menggunakan teknik pemrograman dinamis beberapa kali namun hari ini seorang teman bertanya kepada saya bagaimana saya mendefinisikan sub-masalah saya, saya menyadari bahwa saya tidak punya cara untuk memberikan jawaban formal yang objektif. Bagaimana Anda secara resmi mendefinisikan sub-masalah untuk masalah yang akan Anda selesaikan menggunakan pemrograman dinamis?
algorithms
dynamic-programming
Daniel Gratzer
sumber
sumber
Jawaban:
Prinsip pemrograman dinamis adalah untuk berpikir top-down (yaitu secara rekursif) tetapi menyelesaikan bottom up. Jadi strategi yang baik untuk merancang DP adalah merumuskan masalah secara rekursif dan menghasilkan sub-masalah seperti itu.
sumber
Seperti yang ditunjukkan @Suresh, setelah Anda tahu bahwa masalah Anda dapat diselesaikan dengan DP (yaitu menunjukkan substruktur yang optimal dan subproblem yang tumpang tindih), Anda mungkin memikirkan solusi membagi dan menaklukkan rekursif.
Tentu saja, membagi dan menaklukkan akan sangat tidak efisien karena setiap masalah yang dihadapi dalam pohon rekursi yang terkait akan dipecahkan lagi bahkan jika sudah ditemukan dan dipecahkan. Di sinilah DP berbeda: setiap kali Anda menemukan subproblem, Anda menyelesaikannya dan menyimpan solusinya dalam sebuah tabel. Kemudian, ketika Anda menemukan lagi subproblem itu, Anda mengaksesnya diO (1) waktu solusinya daripada menyelesaikannya lagi. Karena jumlah subproblem yang tumpang tindih biasanya dibatasi oleh polinomial, dan waktu yang diperlukan untuk menyelesaikan satu subproblem juga polinomial (jika tidak, DP tidak dapat memberikan solusi yang hemat biaya), Anda mendapatkan secara umum solusi polinomial.
Karena itu, memikirkan solusi membagi dan menaklukkan akan memberi Anda wawasan tentang apa subproblem mungkin untuk masalah khusus Anda.
sumber
Pengalaman saya adalah menemukan cara untuk "mengurangi penghitungan berlebihan dengan bantuan menyimpan nilai berguna yang telah disebutkan". Omong-omong, Pemrograman Dinamis sangat populer di ICPC (International Collegiate Programming Contest. Siapa pun dapat memiliki perasaannya sendiri tentang DP setelah melakukan beberapa masalah ICPC.
sumber