回溯算法解决背包问题matlab实现,经典算法精讲精练之回溯法求解0-1背包问题

最近来一波基础算法吧,掌握基础原理方可行走天下。回溯法本质是用来搜索问题的解,典型地就是使用深度优先搜索,搜索路径一般沿树形结构进行,在搜索过程中,首先会判断所搜索的树结点是否包含问题的解,如果肯定不包含,则不再搜索以该结点为根的树结点,而向其祖先结点回溯;否则进入该子树,继续按深度优先策略搜索。

可能这么说不是很容易懂,咱们来的实例吧,那就是经典的0-1背包问题,关于这一问题后边很多算法都会涉及到,咱们一点点深入~

我们还是使用典型的三背包为例,问题描述如下:设有三个背包,其重量分别为:16,15, 15;价值分别为: 45,25,25;请选择背包,使其重量不超过30,但价值最大。

可以看出我们的约束条件为总重量不超过30,目标是价值最大,那我们就可以使用回溯法的思想来求解:

每个背包都可以被选择中或者不选,理论上如果不加任何限制的话一共有八种可能(2×2×2),但我们在搜索的过程中要时刻注意总重量不可超过30 ,在这个基础上使其总价值最大,于是我们可以从第一个背包开始,先选中它,其重量是16,小于30,没有问题,然后在选择第二个背包,其重量为15,二者总重量为31,超过30,所以不能选择第二个背包,同理第三个背包也不能选,也就是说在选中第一个背包的前提下,另外两个背包就都不能再选了,这是八种理论可能情况中的一种;以此类推,不选第一个背包,在此基础上选

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值