四川理工学院算法范例.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
case :X是解结点and cost(X) <U: begin U?min(cost(X),u(X)+ ε); ans?X; end; : u(X)+ ε<U : U?u(X)+ ε: endcase; end; if 不再有活结点 or 下一个E-结点有C’≥U then begin print(‘least cost=’,U); while ans≠0 do begin print(ans); ans?parent(ans); end; return; end; call least(E); repeat; endp; 对算法LCBB还需强调以下几点: 1.当下一个E-结点,使C’≥U时,算法终止; 2.子算法ADD是加入一个结点到活结点表中,LEAST是从一个活结点表中删去一个结点,活结点表作成一个min-堆; 3.如果U是已找到的一个解X的成本值,U=c(X)<u(X),对于X的儿子Y,不仅c’(Y) >U而且c’(Y) =U的结点Y都要被杀死; 4.如果U是一个单纯的上界,它是由一可行结点 X的u值修改而得,U=u(X)+ε。对于X的儿子只杀死c’(Y) >U的Y,c’(Y) =U的Y不被杀死,Y入堆; 5.虽然找到了一个答案结点X,但它的成本值大于它的上界值u(X),这说明,这个答案结点的子孙中还有成本更小的答案结点,U取u(X)+ ε,对于X的儿子结点Y,只杀死c’(Y) >U的Y,c’(Y) =U的Y不被杀死,Y入堆; 8.3 0/1背包问题的LC分枝-限界求解的实现 例8.3 0/1背包问题。 已知有n种物品和一个可容纳M重量的背包,每种物品i的重量为wi,假定将物品i放入背包,可以得到pi的效益,问采用何种装包方案,可以使背包中物品的总效益最大。 为了获得问题的最优解,让背包容量尽可能地缓慢消耗。要求将物品按容量的非降次序放入背包,同时为了使背包的效益值迅速增加,很自然地应在效益值的增长率与容量的消耗率之间取得平衡,也就是每一次放入背包的物品应使它的每一单位容量获得最大的效益,这就需要使物品的装入次序按pi/wi比值的非增序进行。 问题可描述如下: 极小化: 规范函数: 若干问题考虑如下: 解空间:0/1背包问题的解可以表示成一个n元向量,各分量xi可以取0或1,解空间最多有2n个向量,这个解空间与子集和数问题的解空间相同,有元组大小可变与元组大小固定两种状态空间树。下面仅考虑第一种状态空间树,在这棵树中,满足的叶子是答案结点,而其它叶子都是不可行结点。 成本函数:为了使最小成本答案结点与最优解对应,成本函数定义如下: 1.如果X是答案结点 C(X)= 2.如果X是不可行的叶子结点C(X)=∞; 3.如果X是非叶子结点C(X)=min{C(LCHILD(X)),C(RCHILD(X))}。 界函数:下界函数C和上界函数u,要求对于状态空间树上的每个结点X,有C’(X)≤ C(X)≤u(X)。 设X是第j级上的一个结点,1≤j≤n+1。在结点X处已对前j-1种物品是否装包作出了抉择xi(xi =0或1,1≤i<j=。于是当前背包的成本为,由C的定义 ,可知 ,取 ,对于第j到n种物品,如果 ,则修改u(X)。具体实现如下: 算法8.3 procedure UBOUND(P,W,k,M); /P:当前效益总量;W:当前背包重量;k:上次处理的物品的下标号;M:背包容量,W(i):第i种物品的重量;P(i):第i种物品的效益值,并且P(i)/W(i)≥P(i+1)/W(i+1), 1≤i<n/ begin b?P;c?W; for i?k+1 to n do if c+ W(i)≤M then begin c?c+ W(i); b?b- P(i); end; return(b); endp; 如果X是j级上的一个结点,1≤j≤n+1,则u(X)=UBOUND ( , ,j-1,M) 下界函数C’(X)可以定义如下: 对于j≤i<n,将xi=0或1的要求放宽到0≤xi≤1,然后用贪婪法求解这个放宽了要求的问题,具体实现如下: 算法8.4. 算法中涉及的说明同算法8.3. procedure BOUND(P,W,k,M); begin b?P;c?W; for i?k+1 to n do begin c?c+ W(i); if cM then b?

您可能关注的文档

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档