**动态规划之01背包问题与背包问题衍生详解(个人小结思考)**

本文探讨了01背包问题,指出贪心算法在此问题上的局限性,并介绍了动态规划的递归和建表两种解决方案。文章还讨论了背包问题的变种,如存在从属关系的物体,提出了将从属物体视为主物体子集的处理方法。
摘要由CSDN通过智能技术生成

动态规划之01背包问题与背包问题衍生详解(个人小结思考)


01背包问题是背包问题的基础类型,我们都知道对于基础问题的深入理解有助于帮助我们解答相同类型动态规划问题,相当于举一反三。所以这篇文章主要记录我对背包问题的个人理解,解释可能偏口语化。

————

问题描述: 在一个固定容量 V 的背包中可选择放置物体,物体总个数为 N,每个物体都有重量 Weight 与价值 Value 的属性。 如何选择放置才能找到最优解(得到的总价值最大)。

————

首先用贪心算法是不可行的,譬如选择 V/W 最大的优先放置,例如:

​ V = 10,

​ W1=7, V1=14, V1/W1 = 2

​ W2 , W3 =5, V2, V3=9, V2/W2<2

这时如果用贪心,会先放置W1,总价值为14,这时背包已经放不下其他的了。但实际上应该选择放 W2, W3, 总价值为18.

当然用贪心能达到大概最优的效果且复杂度低,在有些情况可以考虑。

————

既然保证最优,必须要考虑所有情况,暴力求解方法是对于每个物体,都有放与不放两种情况,那么总共有2^N种情况,复杂度指数型增加显然不可取。但我们需要知道,优化其实就是针对暴力破解不断优化的。

优化思路: 首先需要了解到,在背包剩余容量可以放下某物体的时候,这个时候才继续考虑往下分出可能性。比如一个物体压根放不进去,那么我们需要考虑的情况就应该是2^(N-1),因为他压根放不进。照着这个思路,我们引出动态规划算法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值