- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章-背包问题
若不考虑预处理中排序所耗费的时间,该算法的 时间复杂度为O(n)。 该算法不能计算近似比δ,因此属于启发式算法 没有近似程度的保障,但在该算法基础上做一点小改 动,就可得到下面介绍的近似算法。 5.近似算法 背包问题最常用的近似算法是基于贪心算法思想 实现的,为提高效果,在贪心算法处理后,还可对背 包外的物品按价值密度从高到低再扫描一次,并在扫 描过程中将还能装入到背包中的物品装入,具体实现 方法可描述如下: Algorithm Approximate_BKP; Begin Reduce_c:=c; {Reduce_c为背包的剩余载重量} Z_G:=0; {Z_G为背包中所有物品的总价值} Flag_1:=0; {Flag_1为标志变量} For i:=1 to n do x[i]=0; For i:=1 to n do If w[i]=Reduce_c then Begin x[i]:=1; Reduce_c:=Reduce_c-w[i]; Z_G:= Z_G+p[i]; End Else Begin If Z_Gp[i] then If Flag_1=0 then Begin {第一次碰到不能装入到背包中的物品} for j:=1to i-1 do x[j]:=0; x[i]:=1; Z_G:=p[i]; Reduce_c:=c-w[i]; Flag_1:=1; Exit {跳出前面的循环For i:=1 to n do} End End 下述操作是为提高效果,在Flag_1=1的情况下对 背包外的物品按价值密度从高到低再扫描一次,并在 扫描过程中将能装入到背包中的物品装入,这些操作 不改变算法的近似比,若Flag_1=0,前述代码会扫描 所有的物品。 If Flag_1=1 then For i:=1 to n do If (x[i]:=0) and (w[i]=Reduce_c) then Begin x[i]:=1; Reduce_c:=c-w[i]; Z_G:= Z_G+p[i]; End End 若不考虑预处理中排序的时间,则算法的时间复 杂度为O(n)。 设问题最优值为z*,第一次碰到不能装入背包中 的物品b就是临界项,故问题上界为 令 由于第一次碰到不能装入到背包中的物品为b,故 有 6.动态规划法 运用动态规划的原理和方法,建立相应的模型并 求解。鉴于动态规划的方法在时间复杂性和空间复杂 性上都不具优势,算法的实现细节从略。 7.分支定界法 例3.1 n=4,W=(30,40,30,10),P=(180,200,120,30),C=95。 解 该问题数据已按价值密度从大到小排序,令rc为背包 在装入部分物品后剩余的载重量,则问题的求解过程如下: (1)用贪心算法求得整个背包问题的下界b=410。 (2)令x1=0,求出此时的上界u1=350。 (3)由于在x1=0的情况下u1b,因此x1=1,即把x1=0的情况 剪支。 (4)在x1=1的情况下,令x2=0,求出此时的上界u2=330。 (5)由于在x1=1,x2=0的情况下u2b,因此x2=1,即把x2=0 的情况剪支。 (6)在x1=1,x2=1的情况下,由于此时rc=95-30-40=25w3 =30,因此x3=0,即把x3=1的情况剪支。 (7)对于最后一个物品,由于rc=25w4=10,因此x4=1,即 把x3=0的情况剪支。 可知,问题的最优解为 ,最优值 有界与无界背包问题及其算法 有界背包问题可转换为0-1背包问题,但转换后并 没有降低问题求解的难度,因此,0-1背包问题的算法 同样可用来求解有界背包问题,当然,也有很多专门 用于求解无界背包问题的算法,可参考有关的资料。 这里,仅介绍有界背包问题如何转换为0-1背包问 题。 在有界背包问
文档评论(0)