电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

回溯法解决01背包问题课件

21页
  • 卖家[上传人]:F****n
  • 文档编号:88124386
  • 上传时间:2019-04-19
  • 文档格式:PPT
  • 文档大小:340.50KB
  • / 21 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、回溯法解决01背包问题,回溯法解决01背包问题,1、算法思想 2、问题描述 3、设计实现,回溯法解决01背包问题,回溯法:是一个既带有系统性又带有跳跃性的的搜索算法。它在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,总是先判断该结点是否肯定不包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的系统搜索,逐层向其原先结点回溯。否则,进入该子树,继续按深度优先的策略进行搜索。 课堂上老师已经讲解过用回溯法解决n-皇后问题,m-图着色问题以及哈密顿环问题,他们有相同的特征即问题的求解目标都是求满足约束条件的全部可行解。而0/1背包是最优化问题,还需要使用限界函数剪去已能确认不含最优答案结点的子树。,回溯法解决0/1背包问题,运用回溯法解题通常包含以下三个步骤: a. 针对所给问题,定义问题的解空间; b. 确定易于搜索的解空间结构; c. 以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索;,0/1背包问题概述,在0/1背包问题中,需对容量为c的背包进行装载。从n个物品中选取装入背包的物品,每件物品 i的重量

      2、为wi, 价值为pi。对于可行的背包装载,背包中的物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高,即 取得最大值。约束条件为 c和 。 在这个表达式中,需求出xi的值。xi=1表示物品i装入背包中,xi=0表示物品i不装入背包。,回溯法解决01背包问题,回溯法解决01背包问题,问题举例最优值上界,对于0-1背包问题回溯法的一个实例,n=4,M=7,p=9,10,7,4,w=3,5,2,1.这4个物品的单位重量价值分别为3,2,3,5,4.以物品为单位价值的递减序装入物品。先装入物品4,然后装入物品3和1.装入这3个物品后,剩余的背包容量为1,只能装入0.2个物品2.由此可得到一个解为x=1,0.2,1,1,其相应的价值为22.尽管这不是一个可行解,但可以证明其价值是最有大的上界。因此,对于这个实例,最优值不超过22.,回溯法解决01背包问题,01背包问题是一个子集选取问题,适合于用子集树表示01背包问题的解空间。在搜索解空间树是,只要其左儿子节点是一个可行结点,搜索就进入左子树,在右子树中有可能包含最优解是才进入右子树搜索。否则将右子树剪去。,问题分析:,首先是将可供

      3、选择的物品的个数输入程序,将物品排成一列,计算总物品的体积s,然后输入背包的实际体积V,如果背包的体积小于0或者大于物品的总体积s,则判断输入的背包体积错误,否则开始顺序选取物品装入背包,假设已选取了前i 件物品之后背包还没有装满,则继续选取第i+1件物品,若该件物品“太大“不能装入,则弃之而继续选取下一件,直至背包装满为止。但如果在剩余的物品中找不到合适的物品以填满背包,则说明“刚刚“装入背包的那件物品“不合适“,应将它取出“弃之一边“,继续再从“它之后“的物品中选取,如此重复,直至求得满足条件的解。 因为回溯求解的规则是“后进先出“,所以要用到栈来存储符合条件的解,在存储过程中,利用数组来存储各个物品的体积,然后用深度优先的搜索方式求解,将符合条件的数组元素的下标存入栈里,最后得到符合条件的解并且实现输出。,限界函数,设r是当前剩余物品价值总和;cp是当前结点X的价值;bp是当前X结点上界函数值。 L始终为已搜索到的答案节点中受益的最大值,当cp+r=bpL时可剪去以X为根的子树。 计算右子树中解的上界的更好方法是将剩余物品依其单位重量价值排序,然后依次装入物品,直至装不下时,再装

      4、入该物品的一部分而装满背包。由此得到的价值是右子树中解的上界。,L始终为已搜索到的答案节点中受益的最大值,最优解必定大于等于L,对于任意结点X,若其上界函数值bpL,则可以断定X子树上不含最优答案结点,可以剪去以X为根的子树,Z,Y,X,T,bp=cp+r,rp,cw,cp,考察如下背包问题:n=3,w=11,8,6,p=18,25,20且M=20.,三个对象的背包问题的解空间 1 0 1 0 1 0 0 0 1 0 1 0 1 0,A,B,G,I,F,H,E,L,D,C,L=43,L=43,L=38,L=25,L=20,L=0,L=45,L=18,回溯法解决0/1背包问题,#include int c; /背包容量 int n; /物品数 int weight100; /存放n个物品重量的数组 int price100; /存放n个物品价值的数组 int currentWeight=0; /当前重量 int currentPrice=0; /当前价值 int bestPrice=0; /当前最优值 int bestAnswer100; /当前最优解 int bp=0; int bA1

      5、00; /当前最优解 int times=0;,回溯法解决01背包问题,void Print(); void Backtracking(int i) times+=1; if(in) Print(); if(bestPricebp) bp=bestPrice; for(int j=1;j=n;j+) bAj=bestAnswerj; return; ,回溯法解决01背包问题,if(currentWeight+weighti=c) /将物品i放入背包,搜索左子树 bestAnsweri = 1; currentWeight += weighti; bestPrice += pricei; Backtracking(i+1); /完成上面的递归,返回到上一结点,物品i不放入背包,准备递归右子树 currentWeight -= weighti; bestPrice -= pricei; bestAnsweri = 0; Backtracking(i+1); ,回溯法解决01背包问题,void Print() int i; printf(“n路径为 “); for(i=1;in;+i) printf(“%d,“,bestAnsweri); printf(“%dt价值为%dn“,bestAnsweri,bestPrice); void main() int i; /*输入部分*/ printf(“请输入物品的数量:n“); scanf(“%d“,回溯法解决01背包问题,for(i=1;i=n;i+) scanf(“%d“, ,回溯法解决01背包问题,回溯法解决01背包问题,回溯法解决01背包问题,THANK YOU !,

      《回溯法解决01背包问题课件》由会员F****n分享,可在线阅读,更多相关《回溯法解决01背包问题课件》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.