Apakah ada perbedaan antara pemrograman dinamis top-down dan bottom-up?

33

Apakah ada perbedaan mendasar antara pemrograman dinamis top-down dan bottom-up?

Secara khusus, apakah ada masalah yang dapat diselesaikan dari bawah ke atas tetapi tidak dari atas ke bawah? Atau apakah pendekatan bottom-up hanya merupakan pengulangan dari pengulangan dalam pendekatan top-down?

pengguna695652
sumber

Jawaban:

27

Untuk menggunakan metode bottom-up, Anda harus dapat secara efisien menentukan apa "bottom" itu, yang biasanya berarti Anda membutuhkan ruang masalah yang sangat terbatas. Jika Anda tahu kalkulasi level terendah apa yang akan terjadi dan urutan ketergantungan naik, masuk akal untuk melakukannya secara iteratif dalam urutan yang tepat dan menyimpan hasilnya. Faktorial, Fibonacci naif, dan relasi pengulangan Euler untuk partisi adalah contoh masalah yang cocok untuk pendekatan ini.

Beberapa masalah tidak memiliki urutan dasar atau ketergantungan yang mudah ditentukan untuk perhitungan. Evaluasi posisi catur, misalnya, berguna untuk memoised posisi, dengan skor evaluasi disimpan sehingga tidak perlu dihitung ulang. Posisi dapat berulang di beberapa tingkat pohon pencarian karena memindahkan transposisi dan pengulangan sehingga menyimpan hasil evaluasi bermanfaat. Tetapi tidak ada cara untuk mengetahui apa posisi di tingkat terendah pohon akan tanpa turun secara rekursif (dan memperhitungkan pemangkasan menengah) sehingga top down sebenarnya satu-satunya pendekatan yang layak.

Kyle Jones
sumber
4
  • Pendekatan top-down: Ini adalah kejatuhan langsung dari formulasi rekursif masalah apa pun. Jika solusi untuk masalah apa pun dapat diformulasikan secara rekursif menggunakan solusi untuk sub-masalah, dan jika sub-masalah yang tumpang tindih, maka orang dapat dengan mudah memoize atau menyimpan solusi untuk sub-masalah dalam sebuah tabel. Setiap kali kami mencoba menyelesaikan sub-masalah baru, kami pertama-tama memeriksa tabel untuk melihat apakah sudah diselesaikan. Jika suatu solusi telah direkam, kita dapat menggunakannya secara langsung, jika tidak kita memecahkan sub-masalah dan menambahkan solusinya ke tabel.

  • Pendekatan bottom-up: Setelah kami merumuskan solusi untuk suatu masalah secara rekursif seperti dalam hal sub-masalah, kami dapat mencoba merumuskan kembali masalah dengan cara bottom-up: cobalah memecahkan sub-masalah terlebih dahulu dan menggunakan solusi mereka untuk membangun- dan temukan solusi untuk sub-masalah yang lebih besar. Ini juga biasanya dilakukan dalam bentuk tabel dengan secara iteratif menghasilkan solusi untuk sub-masalah yang lebih besar dan lebih besar dengan menggunakan solusi untuk sub-masalah kecil. Sebagai contoh, jika kita sudah tahu nilai-nilai F41 dan F40, kita dapat langsung menghitung nilai F42.

M. Shahzad
sumber