收藏 分享(赏)

(原创精品)0-1背包问题(回溯法).doc

上传人:11xg27ws 文档编号:12274922 上传时间:2021-12-08 格式:DOC 页数:3 大小:47.50KB
下载 相关 举报
(原创精品)0-1背包问题(回溯法).doc_第1页
第1页 / 共3页
(原创精品)0-1背包问题(回溯法).doc_第2页
第2页 / 共3页
(原创精品)0-1背包问题(回溯法).doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、0-1 背包问题0-1 背包问题的解空间可用子集树表示在搜索解空间树时,只要其左儿子结点是一个可行结点搜索进入其左子树当右子树中有可能包含最优解进入右子树搜索否则将右子树减去r当前剩余物品价值总和cp当前价值bestp当前最优价值当 cp+rbestp 时,可减去右子树计算右子树中解的上界的更好的方法 将剩余物品依其单位价值排序 依次装入物品,直至装不下时 再装入该物品的一部分而装满背包 由此得到的价值右子树中解的上界0-1 背包问题的一个实例已知:n=4c=7p=9 10 7 4w=3 5 2 1解: 这四个物品的单位价值分别3 2 3.5 4 以物品单位重量价值的递减序装入物品 先装物品

2、4 装入物品 3 和物品 1 装入这 3 个物品后,剩余的背包容量为 17-(3+2+1)只能装入 0.21/5的物品 2 得到一个解x=1 0.2 1 1相应的价值为 221*9+0.2*10+1*7+1*4 这不是一个可行解,但其价值是最优值的上界算法分析: Bound 计算当前结点处的上界 Knap 的数据成员记录解空间树中的结点信息以减少参数传递及递归调用所需的栈空间 在解空间树的当前扩展结点处,仅当要进入右子树时才计算上界 Bound,以判断是否可将右子树减去 进入左子树时不需计算上界,因为其上界与其父结点的上界相同核心代码:tempclass Knapfriend Typep Kn

3、apsack(Typep*,Typew*,Typew,int);private:Typep Bound(int i);Void Backtrack(int i);Typew* w;Typep* p;Typew cw;Typep cp;Typep bestp;Tempvoid Knap:Backtrack(int i)if(in)bestp=cp;return;if(cw+wiTypep Knap:Bound(int i)/ 计算上界Typew cleft = c - cw; / 剩余容量Typep b = cp;/ 以物品单位重量价值递减序装入物品while (i = n b += pi;i+;/ 装满背包if (i = n) b += pi/wi * cleft;return b;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报