Saya telah mengerjakan pemrograman dinamis selama beberapa waktu. Cara kanonik untuk mengevaluasi rekursi pemrograman dinamis adalah dengan membuat tabel dari semua nilai yang diperlukan dan mengisinya baris demi baris. Lihat misalnya Cormen, Leiserson et al: "Pengantar Algoritma" untuk pengantar.
Saya fokus pada skema perhitungan berbasis tabel dalam dua dimensi (pengisian baris-demi-baris) dan menyelidiki struktur dependensi sel, yaitu sel mana yang perlu dilakukan sebelum yang lain dapat dihitung. Kami menyatakan dengan set indeks sel yang bergantung pada sel . Perhatikan bahwa harus bebas siklus.
Saya abstrak dari fungsi aktual yang dihitung dan berkonsentrasi pada struktur rekursifnya. Secara formal, saya mempertimbangkan recurrrence menjadi pemrograman dinamis jika memiliki bentuk
dengan , dan beberapa fungsi (yang dapat dihitung) yang tidak menggunakan selain melalui .
Ketika membatasi granularity dari ke area kasar (ke kiri, atas-kiri, atas, atas-kanan, ... dari sel saat ini) satu mengamati bahwa pada dasarnya ada tiga kasus (hingga simetri dan rotasi) yang valid rekursi pemrograman dinamis yang menginformasikan bagaimana tabel dapat diisi:
Area merah menunjukkan (perkiraan berlebihan) . Kasus satu dan dua mengakui himpunan bagian, kasus ketiga adalah kasus terburuk (hingga transformasi indeks). Perhatikan bahwa tidak sepenuhnya diwajibkan bahwa seluruh area merah dilindungi oleh ; beberapa sel di setiap bagian merah tabel cukup untuk mengecatnya merah. Area putih secara eksplisit diperlukan untuk tidak mengandung sel yang diperlukan.
Contoh untuk kasus satu adalah edit jarak dan urutan umum terpanjang , kasus kedua berlaku untuk Bellman & Ford dan CYK . Contoh yang kurang jelas termasuk yang bekerja pada diagonal daripada baris (atau kolom) karena dapat diputar agar sesuai dengan kasus yang diusulkan; lihat jawaban Joe sebagai contoh.
Saya tidak punya contoh (alami) untuk kasus tiga! Jadi pertanyaan saya adalah: Apa contoh untuk kasus rekursi / masalah pemrograman dinamis?