递归、回溯-0-1背包问题

0-1背包问题是NP难问题,通过建立子集树来表示解空间。回溯法在此问题中应用,当左儿子节点可行时进入左子树,若右子树可能包含最优解则进入,否则剪枝。当剩余物品价值加上当前价值小于等于最优价值时可剪去右子树。通过对物品按单位重量价值降序装入,可得到右子树解的上界。算法首先按单位重量价值排序物品,然后依次装入,计算上界并剪枝。回溯法解0-1背包问题的时间复杂度为O(nW),其中n是物品数,W是背包容量。
摘要由CSDN通过智能技术生成

0-1背包问题是子集选取问题。一般情况下,0-1背包问题是NP难的,0-1背包问题的解空间可用子集树表示。解0-1背包问题的回溯法与解装载问题的回溯法十分相似。

在搜索解空间树时,只要其左儿子结点是一个可行结点,搜索就进入其左子树。当右子树有可能包含最优解时才进入右子树搜索,否则将右子树剪去。设r是当前剩余物品价值总和:cp是当前价值;bestp是当前最优价值。当cp+r<=bestp时,可剪去右子树。计算中解的上界的更好方法是剩余物品依其单位重量价值排序,然后依次装入物品,直到装不下时,再装入该物品的一部分而装满背包。由此得到的价值是右子树解的上界。

例如,对于0-1背包问题的一个实例,n=4,c=7,p=[9,10,7,4],w=[3,5,2,1].这个物品的单位重量价值分别为[3,2,3,5,4],以物品单位重量价值的递减序装入物品,先装入物品4,然后装入物品3和1,。装入这3个物品后,剩余的背包容量为1,只能装入0.2的物品2.由此得到一个解为x = [1,0.2,1,1],其相应的价值为22.尽管这不是一个可行解,但可以证明其价值是最优解的上界。因此,对于这个实例,最优值不超过22。

输入:物品的数目n,背包的容量c。各个物品的重量wi,各个物品的价值vi。

输出:装入背包的最大价值。

运行结果:

为了便于计算上界&#

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值