回溯法解决背包问题PPT课件.ppt

上传人(卖家):三亚风情 文档编号:2645571 上传时间:2022-05-14 格式:PPT 页数:23 大小:2.02MB
下载 相关 举报
回溯法解决背包问题PPT课件.ppt_第1页
第1页 / 共23页
回溯法解决背包问题PPT课件.ppt_第2页
第2页 / 共23页
回溯法解决背包问题PPT课件.ppt_第3页
第3页 / 共23页
回溯法解决背包问题PPT课件.ppt_第4页
第4页 / 共23页
回溯法解决背包问题PPT课件.ppt_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、回溯法解决01背包问题回溯法解决01背包问题1 1、算法思想、算法思想2 2、问题描述、问题描述3 3、设计实现、设计实现 回溯法解决01背包问题 回溯法:是一个既带有系统性又带有跳跃性的的回溯法:是一个既带有系统性又带有跳跃性的的搜索算法。它在包含问题的所有解的解空间树中,按照搜索算法。它在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。算法搜深度优先的策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,总是先判断该结点是否肯索至解空间树的任一结点时,总是先判断该结点是否肯定不包含问题的解。如果肯定不包含,则跳过对以该结定不包含问题的解。如果肯定不包含

2、,则跳过对以该结点为根的子树的系统搜索,逐层向其原先结点回溯。否点为根的子树的系统搜索,逐层向其原先结点回溯。否则,进入该子树,继续按深度优先的策略进行搜索。则,进入该子树,继续按深度优先的策略进行搜索。 课堂上老师已经讲解过用回溯法解决课堂上老师已经讲解过用回溯法解决n-皇后问题,皇后问题,m-图着色问题以及哈密顿环问题,他们有相同的特征图着色问题以及哈密顿环问题,他们有相同的特征即问题的求解目标都是求满足约束条件的全部可行解。即问题的求解目标都是求满足约束条件的全部可行解。而而0/1背包是最优化问题,还需要使用限界函数剪去已背包是最优化问题,还需要使用限界函数剪去已能确认不含最优答案结点的

3、子树。能确认不含最优答案结点的子树。回溯法解决0/1背包问题l运用回溯法解题通常包含以下三个步骤: a. 针对所给问题,定义问题的解空间; b. 确定易于搜索的解空间结构; c. 以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索;0/1背包问题概述 在0/1背包问题中,需对容量为c的背包进行装载。从n个物品中选取装入背包的物品,每件物品 i的重量为wi, 价值为pi。对于可行的背包装载,背包中的物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高,即 取得最大值。约束条件为 c和 。 在这个表达式中,需求出xi的值。xi=1表示物品i装入背包中,xi=0表示物品i

4、不装入背包。niiixp1niiixw1nixi11 , 0回溯法解决01背包问题l回溯法解决01背包问题l问题举例最优值上界l对于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背包问题l01背包问题是一个子

5、集选取问题,适合于用子集树表示01背包问题的解空间。在搜索解空间树是,只要其左儿子节点是一个可行结点,搜索就进入左子树,在右子树中有可能包含最优解是才进入右子树搜索。否则将右子树剪去。问题分析:l首先是将可供选择的物品的个数输入程序,将物品排成一列,计首先是将可供选择的物品的个数输入程序,将物品排成一列,计算总物品的体积算总物品的体积s,然后输入背包的实际体积,然后输入背包的实际体积V,如果背包的体积,如果背包的体积小于小于0或者大于物品的总体积或者大于物品的总体积s,则判断输入的背包体积错误,否,则判断输入的背包体积错误,否则开始顺序选取物品装入背包,假设已选取了前则开始顺序选取物品装入背包

6、,假设已选取了前i 件物品之后背包件物品之后背包还没有装满,则继续选取第还没有装满,则继续选取第i+1件物品,若该件物品件物品,若该件物品太大太大不能装不能装入,则弃之而继续选取下一件,直至背包装满为止。但如果在剩入,则弃之而继续选取下一件,直至背包装满为止。但如果在剩余的物品中找不到合适的物品以填满背包,则说明余的物品中找不到合适的物品以填满背包,则说明刚刚刚刚装入背包装入背包的那件物品的那件物品不合适不合适,应将它取出,应将它取出弃之一边弃之一边,继续再从,继续再从它之后它之后的物品中选取,如此重复,直至求得满足条件的解。的物品中选取,如此重复,直至求得满足条件的解。l因为回溯求解的规则是

7、因为回溯求解的规则是后进先出后进先出,所以要用到栈来存储符合条件,所以要用到栈来存储符合条件的解,在存储过程中,利用数组来存储各个物品的体积,然后用的解,在存储过程中,利用数组来存储各个物品的体积,然后用深度优先的搜索方式求解,将符合条件的数组元素的下标存入栈深度优先的搜索方式求解,将符合条件的数组元素的下标存入栈里,最后得到符合条件的解并且实现输出。里,最后得到符合条件的解并且实现输出。 限界函数l设r是当前剩余物品价值总和;cp是当前结点X的价值;bp是当前X结点上界函数值。 L始终为已搜索到的答案节点中受益的最大值,当cp+r=bpL时可剪去以X为根的子树。l计算右子树中解的上界的更好方

8、法是将剩余物品依其单位重量价值排序,然后依次装入物品,直至装不下时,再装入该物品的一部分而装满背包。由此得到的价值是右子树中解的上界。THANK YOUSUCCESS2022-5-14L始终为已搜索到的答案节点中受益的最大值,最优解必定大于等于始终为已搜索到的答案节点中受益的最大值,最优解必定大于等于L,对于任意结点,对于任意结点X,若其上界函数值若其上界函数值bpL,则可以断定,则可以断定X子树上不含最优答案结点,可以剪去以子树上不含最优答案结点,可以剪去以X为根的子为根的子树树ZYXTbp=cp+rrpcw,cp考察如下背包问题:n=3,w=11,8,6,p=18,25,20且M=20.三

9、个对象的背包问题的解空间三个对象的背包问题的解空间 1 0 1 0 1 0 0 0 1 0 1 0 1 0ABGIFHELDCL=43L=43L=38L=25L=20L=0L=45L=18回溯法解决0/1背包问题l#include lint c; /背包容量 lint n; /物品数 lint weight100; /存放n个物品重量的数组 lint price100; /存放n个物品价值的数组 lint currentWeight=0; /当前重量 lint currentPrice=0; /当前价值 lint bestPrice=0; /当前最优值 lint bestAnswer100;

10、/当前最优解 lint bp=0;lint bA100; /当前最优解 lint times=0;回溯法解决01背包问题l void Print(); lvoid Backtracking(int i) ll times+=1;lif(in) l lPrint();lif(bestPricebp)llbp=bestPrice;lfor(int j=1;j=n;j+)l bAj=bestAnswerj;llreturn; l 回溯法解决01背包问题lif(currentWeight+weighti=c) l /将物品i放入背包,搜索左子树 lbestAnsweri = 1; lcurrentWe

11、ight += weighti; lbestPrice += pricei; lBacktracking(i+1); /完成上面的递归,返回到上一结点,物品i不放入背包,准备递归右子树 lcurrentWeight -= weighti; lbestPrice -= pricei; l bestAnsweri = 0; lBacktracking(i+1); l 回溯法解决01背包问题lvoid Print() l int i; lprintf(n路径为 ); lfor(i=1;in;+i) lprintf(%d,bestAnsweri); lprintf(%dt价值为%dn,bestAnsw

12、eri,bestPrice); l lvoid main() l int i; l/*输入部分*/l printf(请输入物品的数量:n);l scanf(%d,&n);l printf(请输入背包的容量(能承受的重量):n);l scanf(%d,&c);l printf(请依次输入%d个物品的重量:n,n);回溯法解决01背包问题lfor(i=1;i=n;i+)l scanf(%d,&weighti);l printf(请依次输入%d个物品的价值:n,n);l for(i=1;i=n;i+)l scanf(%d,&pricei);lprintf(各符合条件的路径为:n); lBacktra

13、cking(1);lprintf(*n);lprintf(nthe best answer is ); lfor(i=1;in;+i) lprintf(%d,bAi); lprintf(%dtthe price is %dn,bAi,bp); l printf(nn总共搜索结点数%dn,times);l 回溯法解决01背包问题回溯法解决01背包问题 物品情况物品情况搜索结点数搜索结点数递归法递归法 n=3 w=20,15,10; c=25 v=20,30,25; 11递归法递归法n=4 w=10,20,30,40; c=30 v=4,3,2,1;17递归法递归法n=4 w=30,25,10,35 c=40 v=7,9,3,619递归法递归法n=4 w=7,3,4,5 c=10 v=42,12,40,2522回溯法解决01背包问题THANK YOUSUCCESS2022-5-14

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(回溯法解决背包问题PPT课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|