[問題] 01背包的暴搜有甚麼特別的剪枝嗎?

作者: s89162504 (阿本)   2019-12-11 19:05:24
01背包是假多項式
背包容量超大時無法DP
只能用branch and bound
一般教科書上提到的剪枝的方法:
把物品依照CP值排序 CP值高的先放進去
用貪心法計算upper bound
upper bound比較大的點優先擴展
想請問各位大大
還有甚麼特別的方法可以加速嗎?
小弟在修演算法的課
卡一筆測資1000個物品 容量又超大
感謝
作者: oToToT (屁孩)   2019-12-11 19:17:00
價值也超大嗎?
作者: s89162504 (阿本)   2019-12-11 19:22:00
對啊有推薦類似的OJ題目嗎? 我查到的都還是一般的branchand bound
作者: Morris1028 (某 M)   2019-12-12 06:43:00
在搜尋前, 給予一個好的初始值, 而非在搜尋過程慢慢更新那麼有較好的初始值後, 總是先選與不選就要看測資的狀況有明顯差異
作者: s89162504 (阿本)   2019-12-12 16:47:00
morris的意思是直接用upper bound很高的可行解下去暴搜嗎?可是如果最佳解其實在另一邊 會不會反而做白工啊?
作者: Hsins (翔)   2019-12-12 18:49:00
聽起來很像是輝哥ㄉ課欸><
作者: s89162504 (阿本)   2019-12-12 19:45:00
是喔 補考想把那筆測資過了
作者: Morris1028 (某 M)   2019-12-12 20:06:00
這一題收錄 批改娘 20005最後的測資我沒讓 bound and branch 的方式通過, 所以拿個 90 分不是問題著重還是在 upper bound 能算多快, 若每次從頭跑到尾那一種就太慢了
作者: s89162504 (阿本)   2019-12-12 20:33:00
所以是 目前枚舉到第i項物品 剩餘空間w要事先建一個(i,w)的表嗎?會不會太大了XD
作者: Morris1028 (某 M)   2019-12-12 20:56:00
沒看到代碼,我不好說可能少哪一塊基礎但是當 n 破萬,你的直接搜會不會是 n^2 估算
作者: s89162504 (阿本)   2019-12-12 21:17:00
我的code: http://codepad.org/ApC8XqWU所以目前討論有兩個改善的方向了1 從好一點的點開始 2 改善算上界的方法
作者: Morris1028 (某 M)   2019-12-12 21:24:00
首先,若全選為最佳解,這樣的總時間為 N^2搜尋空間太大,不應該牽涉到 priority queue直接使用一般的 DFS 搜尋,比較不會讓空間拖累時間
作者: s89162504 (阿本)   2019-12-12 22:44:00
優先擴展上界較高的點不是比較好嗎?
作者: Morris1028 (某 M)   2019-12-13 07:56:00
估算總比預期來得好,意味著找到合法解後,仍有更多的狀態有待搜索,在這種情況空間需求將不切實際
作者: c910335 (達人)   2019-12-15 06:48:00
單純好奇「容量又超大」具體是多少?
作者: s89162504 (阿本)   2019-12-23 20:10:00
感謝各位 看起來是dfs就行了best first search 狀態太大時 每次都logn反而變瓶頸
作者: kyrie77 (NTU KI)   2018-02-28 21:07:00
輝哥的課嗎XD

Links booklink

Contact Us: admin [ a t ] ucptt.com