Saya mengalami masalah di mana tujuannya adalah menggunakan pemrograman dinamis (bukan pendekatan lain). Ada jarak yang harus direntang, dan satu set kabel dengan panjang yang berbeda. Berapa jumlah minimum kabel yang dibutuhkan untuk menjangkau jarak dengan tepat?
Bagi saya ini tampak seperti masalah ransel , tetapi karena mungkin ada kelipatan dari panjang tertentu, itu adalah masalah ransel terikat, bukan masalah ransel 0/1. (Perlakukan nilai setiap item menjadi bobotnya.) Mengambil pendekatan naif (dan tidak peduli tentang perluasan ruang pencarian), metode yang saya gunakan untuk mengubah masalah ransel terikat menjadi masalah ransel 0/1, cukup sederhana pisahkan kelipatan menjadi lajang dan terapkan algoritma pemrograman dinamis yang terkenal. Sayangnya, ini mengarah pada hasil yang kurang optimal.
Misalnya, kabel yang diberikan:
1 x 10 kaki,
1 x 7 kaki,
1 x 6 kaki,
5 x 3 kaki,
6 x
2 kaki , 7 x 1 kaki
Jika rentang target 13ft, algoritma DP memilih 7 + 6 untuk rentang jarak. Algoritma serakah akan memilih 10 + 3, tetapi ini adalah seri untuk jumlah minimum kabel. Masalah muncul, ketika mencoba span 15ft. Algoritma DP akhirnya memilih 6 + 3 + 3 + 3 untuk mendapatkan 4 kabel, sedangkan algoritma serakah dengan benar memilih 10 + 3 + 2 hanya untuk 3 kabel.
Ngomong-ngomong, melakukan beberapa pemindaian ringan dari konversi yang dibatasi ke 0/1, sepertinya pendekatan yang terkenal untuk mengubah banyak item menjadi {p, 2p, 4p ...}. Pertanyaan saya adalah bagaimana cara kerja konversi ini jika p + 2p + 4p tidak menambah jumlah beberapa item. Sebagai contoh: Saya memiliki 5 kabel 3ft. Saya tidak bisa menambahkan {3, 2x3, 4x3} karena 3 + 2x3 + 4x3> 5x3. Haruskah saya menambahkan {3, 4x3}?
[Saat ini saya mencoba untuk membaca kertas "Oregon Trail Knapsack Problem", tetapi saat ini sepertinya pendekatan yang digunakan tidak ada pemrograman yang dinamis.]