优先队列式广度优先搜索

一 点睛

优先队列以当前节点的上界为优先级,把普通队列改成优先队列,这样就得到了优先队列式分支限界法。

二 算法设计

优先级定义为活节点代表的部分解所描述的已装入物品的上界,上界越大,优先级越高。活节点的价值上界 up=活节点的 cp + 剩余物品装满背包剩余容量的最大价值 rp'。

约束条件:cw+w[i]<=W

限界条件:up=cp+rp'>=bestp

三 图解背包问题

有一个背包和 4 个物品,每个物品的重量和价值都如下图所示,背包的容量 W=10,求在不超过背包容量的前提下,把哪些物品放入背包才能获得最大价值。

1 初始化

sumw 和 sumv 分别用来统计所有物品的总重量和总价值。sumw = 13,sumv =18,sumw>W,因此不能全部装完,需要搜索求解。

2 按价值重量比非递增排序

排序后的结果见下图

3 创建根节点 A

4 扩展节点 A

5 扩展节点 B

6 扩展节点 D

7 扩展节点 F

8 扩展节点 G

队头元素 G 出队,该节点的 up>=bestp,满足限界条件,可以扩展。t=5,已经处理完毕,bestp=cp=15,是最优解,解向量是 x[]=(1,1,1,0)。注意:虽然解是(1,1,1,0),但对应的物品原来的序号是1、4、3。节点 G 出队。

9 队头元素 C 出队

该节点的 up<bestp,不满足限界条件,不再扩展。

10 队头元素 E 出队

该节点的 up<bestp,不满足限界条件,不再扩展。

11 队列为空,算法结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值