算法3:动态规划

5.动态规划
    5.1 什么是动态规划?   
    5.2 自底向上的动态规划:    
    5.3 自顶向下的动态规划  
    5.4  0-1背包问题:
    5.5 完全背包问题

5.动态规划 

    5.1 什么是动态规划?

        动态规划是⼀种把原问题分解为相对简单的子问题的方式求解复杂问题的方法。
        动态规划对于子问题重叠的情况特别有效,因为它将⼦问题的解保存在存储空间中,当需要某个子问题的解时,直接取值即可

    5.2 自底向上的动态规划:

斐波那契数列

    5.3 自顶向下的动态规划

斐波那契数列

    5.4  0-1背包问题:

        一个小偷面前有 n 个财宝,每个财宝有重量 w 和价值 v 两种属性,而他的背包只能携带一定重量的财宝(c),在已知所有财宝的重量和价值的情况下,如何选取财宝,可以最大限度的利用当前的背包容量,取得最大价值的财宝?(限定每种物品只有一个)

        我们用 maxValue [i] [j]  来表示当前背包体积(j) 从(1,2,3, …i)件商品中选取最大价值的组合。
        我们只考虑第 i 件商品,第 i 件商品只有两种情况,拿与不拿:

        (1)若第 i 个物品在最优解中

        我们直接最先将第 i 个物品其放入空背包中,此时背包剩余体积为 j-w,物品还有1,2,…,i-1,我们需要从其中继续找出最好的组合使得在背包体积为j-w且物品为1,2,…,i-1的情况下达到价值最高。由此可知:

        maxValue [i] [j] = maxValue [ i-1 ] [ j-w ] + v                  

        (2)若第 i 个物品不在最优解中

        maxValue [i] [j] = maxValue [ i-1 ] [ j ]             

        得出结论

        maxValue [i] [j] = max{ maxValue [ i-1 ] [ j-w ] + v,maxValue [ i-1 ] [ j ] } 


    5.5 完全背包问题:

        此时,每种物品数量为无限。

         (1)使用第 i 类物品

        此时至少使用1个第 i 类物品。故而我们分析先用掉 1个第 i 类物品的情况: 此时背包剩余体积为 j-w 

        maxValue [i] [j] = maxValue [ i ] [ j-w ] + v  (注意:前后都是 i,而不是出现 i-1,因为放入一个还可以继续放)                  

         (2)不使用第 i 类物品

        maxValue [i] [j] = maxValue [ i-1 ] [ j ]  

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、动态规划算法介绍 1.动态规划算法核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。2...
    一个学霸阅读 385评论 0 0
  • 动态规划 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的...
    icebreakeros阅读 14,062评论 0 0
  • 动态规划,动态规划主要是用于求最值的问题,我认为比较重要的东西是 3部分:1.找到迭代式,也是状态转换方程(注意不...
    LeeDev阅读 835评论 0 3
  • 一个例子 1.描述 对于方程的描述1.当物品或者容量某一项为空,装入的最大价值都为02.当遍历到第i类商品的重量大...
    冰菓_阅读 236评论 0 0
  • 动态规划 动态规划是一种高性能的牛逼算法,由美国的R.Bellman提出,它是动态就是体现在此算法是基于一个递推公...
    董泽平阅读 1,210评论 0 12