01背包问题【分支限界法求解】通俗易懂,适合小白

本人此时还是一名研一的小菜鸡,刚学会了这个算法的基本概念,来总结一下,谁知道今后的我再看到这篇自己写的博客的时候会不会笑出来,哈哈哈哈哈哈哈哈,所以吗,错了的化大佬们评论指正就好了。

还有系列文章动态规划法解01背包问题,回溯法解01背包问题哈,需要的化以下是链接:

动态规划法:https://blog.csdn.net/qq_29051107/article/details/103394491

回溯法:https://blog.csdn.net/qq_29051107/article/details/103395285

 

1背包问题题干(题目中所给出的条件和问题)

给定n种物品和一背包。物品i的体积是Si,其价值为Vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 

物品的个数n=3,背包容量C = 30, S =(16,15,15),价值W =(45,25,25)
 

2分支限界法求解

回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。

常见的两种分支限界法
(1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个结点为扩展结点。
(2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的结点成为当前扩展结点。

第一种:队列式(FIFO)分支限界法解法:

按照队列先进先出(FIFO)原则选取下一个结点为扩展结点

队列空 A→{A};

A先进先出 →{B,C};

B先进先出 →D,E;

由于D不合法,剔除;

E入 →{C,E};

C先进先出 →F,G →{E,F,G};

E先进先出→H,I →{F,G,I};

H不合法,剔除;

F先进先出→J,K→{G,I,J,K};
G先进先出→L,M→{I,J,K,L,M};
此时已到达叶子节点,计算各合法分支的值,最优值为50,对应的最优解为{0,1,1}


第二种:优先队列式分支限界法

按照优先队列中规定的优先级选取优先级最高的结点成为当前扩展结点。

在本例中,优先级即为各节点的价值,当前价值高的节点优先。

队列空 A→{A};

A → B,C→{B,C};

B的价值为45, C的价值为0, 则B出 →D,E;

由于D不合法,剔除;

E入 →{C,E};

E的价值大于C的价值,则 E出 →F,G →{C,F,G};

由于F不合法,剔除;

此时, G为叶子节点,则只能C出→H,I →{H,I};
H的价值为25, I为0,则H出→J,K →{I,J,K};
J,K均为叶子节点,则只能I出→L,M→{L,M};
此时各分支均已到达叶子节点,计算各合法分支的值,则最优值为50,最优解为{0,1,1}。

两种方法生成节点的顺序不同,最优解完全一样。
 

 

  • 14
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cc菠菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值