zoukankan      html  css  js  c++  java
  • 动态规划 ------背包问题

    课件的内容来自于视频:  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的时候,不考虑这个最小值,而是取另外一项作为结果。           

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

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

    追踪解:

    追踪算法

    时间复杂度: 

    推广:

  • 相关阅读:
    CSS定位(Position)
    深入理解Javascript闭包(二)
    深入理解Javascript闭包(一)
    如何将页脚固定在页面底部
    JQuery中$.fn的用法示例
    关于HttpWebRequest.KeepAlive
    Fiddler 教程
    js数组的操作
    oracle 修改字段类型的方法(转)
    Oracle查看表结构的几种方法(转后加工)
  • 原文地址:https://www.cnblogs.com/lixing-nlp/p/7612923.html
Copyright © 2011-2022 走看看