- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
201背包问题.doc
- PAGE 25 -
2 0/1背包问题
为了用上一节所讨论的分枝_限界方法来求解0/l背包问题,可用函数-∑pixi来代替目标函数∑pixi,从而将背包问题由一个极大化问题转换成一个极小化问题。显然,当且仅当-∑pixi取极小值时∑pixi取极大值。这个修改后的背包问题可描述如下:
极小化 -∑pixi (1≤i≤n)
约束条件∑wixi≤M (1≤i≤n) (7.1)
xi=0或xi=1,1≤i≤n
在6.6节曾介绍过0/1背包问题的两种状态空间树结构,这里只讨论在大小固定的元组表示下如何求解0/1背包问题,至于在元组大小可变时,如何求解背包问题,在此基础上是不难解决的。状态空间树中那些表示∑wixi≤M(1≤i≤n)的装包方案的每一个叶结点是答案结点,其它的叶结点均不可行。为了使最小成本答案结点与最优解相对应,需要对每一个答案结点X定义c(X)=-∑pixi;对不可行的叶结点则定义c(X)=∞;对于非叶结点则将c(X)递归定义成min{c(LChild(X)),c(RChild(X))}。
还需要两个函数c’(·)和u(·),使它们对于每个结点X都有c’(·)≤c(X)≤u(X)。这样的两个函数可由下法得到:设X是j级上的一个结点,l≤j≤n+1。在结点X处已对
前j-1种物品装包,这j-l种物品的装入情况为xi,1≤i<j。此时装包的成本为-∑pixi。
1≤i<j
因此c(X)≤-∑pixi,故可以取u(X)=-∑pixi。算法7.5是一个改进了的上界函数,对于
1≤i<j 1≤i<j
X有u(X)=UBound(-∑pixi,∑wixi,j-1,M)。显然由于有-Bound(∑pixi,∑wixi,j-1,M)≤c(X),
1≤i<j 1≤i<j 1≤i<j 1≤i<j
这里Bound是算法6.11,故可得c’(X)=-Bound(∑pixi,∑wixi,j-1,M)。
1≤i<j 1≤i<j
算法7.5 背包问题的上界函数u(·)
void UBound(p,w,k,m) {
//p,w,k和m与算法6.11的含意相同,
//W(i)和P(i)分别是第i种物品的重量和效益值
float w[n],p[n];int i,k,n;
b=p;c=w;
for(i=k+1;i=n;i++) {
if(c+w[i]=m) { c=c+w[i];b=b-p[i];}
}
return (b);
}//UBound
2.1 LC分枝-限界求解
例7.2(LCBB) 考虑背包问题:n=4;(p1,p2,p3,p4)=(10,10,12,18);(w1,w1,w3,w4)=
(2,4,6,9)和M=15。
利用上面所定义的u(·)和c’(·),通过LCBB分枝-限界检索此问题的状态空间树的工作情况如下:开始将根(即图7.10的结点1)作为E-结点,c’(1)=-38,u(1)=-32。由于它不是答案结点,因此过程LCBB置ans=0和U=-32+?。扩展此E-结点,生成它的两个子结点2和3,c’(2)=-38,c’(3)=-32,u(2)=-32,u(3)=-22。结点2,3放人活结点表,结点2变成下一个E-结点,它生成结点4和5,这两个结点也放人活结点表。活结点表中结点4的c’值最小,所以结点4变成下一个E-结点,它生成结点6和7。假定先生成结点6,它放人活结点表,接着放人结点7并将U修改成-38+?。下一个E-结点将是6或7,假定是7,则它的两个子结点是8和9。将8放人活结点表,因为8是答案结点,所以将U修改成-38;而结点9的c’(9)=-20>U=38,因此,它立即被杀死。现在活结点表中具有最小c’值的结点是6和8,无论哪个结点变成下一个E-结点都有c’(E)≥U,因此,在找到答案结点8的情况下终止检索,这时打印出值-38和路径8,7,4,2,1,算法结束。要指出的是,由路径8,7,4,2,1并不能弄清是由哪些物品装入背包才得到-∑pixi=U,即看不出这些xi的取值情况,因此在实现过程 LCBB时应保留一些能反映xi取值情况的附加信息。一种解决办法是每一个结点增设一个位信息段TAG,由答案结点到根结点的这一系列TAG位给出这些xi的值。于是对此问题将有TAG(2)=TAG(4)=TAG(6)=TAG(8)=1和 TAG(3)=TAG(5)=TAG(7)=TAG(9)=0。路径 8,7,4,2,1的一系列TAG是1011,因此x4=1,
文档评论(0)