动态规划 ------背包问题

课件的内容来自于视频:  https://www.youtube.com/watch?v=FDzOqoyQ-jM

背包问题的描述: 

背包的重量限定为 b ,每个物品可以放 >=1个,为了获得最大的价值!

 

把这个实际问题抽象成数学问题,建立模型

Xi表示 装入背包的第 i 种物品的个数。 可以是 1 , 2, 3 。。。。[ b/w] ,这里表示取整数。

 

动态规划问题的关键步骤,怎么进行子问题的界定

总共有 n 种物品, 背包的限定重量为 b ,那么,子问题是 : 总共可以供选择的 商品 为0, 1,2 ,3 ,。。。 .k (这里的k小于等于n)

                           背包的限重的取值是  0,1,2,3,。。。。。y (这里的y小于等于 b)

当 k的取值是  n, y 的取值是  b, 就是这个大问题啦

 

 递推方程的表达式: 

  这个递推式的理解,考虑第 k 个商品放不放入背包。F(k-1) 的意思就是说,我们不放入 第 k个商品,此时的最大价值

          F(k) 表示的是放入第 k 个商品,那么,背包剩下能够承受的重量就是  y-wk , wk表示的是 第k个商品的重量

          我们要得到的就是 这两种情况的最大值,所以,要max。

 装第 0  种商品,当然,我们的价值为0.

   装第 1 种商品,那么,最多可以装  [ y/wb] ,这里是取整数,  如果  某个商品的重量大于背包所承受的重量,,也就是说, 在 Fk(y-Wk)这项里, y-Wk的 的值可能小于0,那么,我们令Fk(y)为负无穷,这样,我们就保证了在Max的时候,不考虑这个最小值,而是取另外一项作为结果。           

 下面讨论 标记函数。为找到最后的解

 

具体的例子: 这里的物品可以放多个。

 

 

追踪解:

 

追踪算法

 

时间复杂度: 

 

推广:

 

 

 

 

posted on 2017-09-29 21:53  JoeLee2017  阅读(410)  评论(0编辑  收藏  举报