zoukankan      html  css  js  c++  java
  • 第七篇 动态规划

    今天跟大家分享下算法思想中比较难的一种"动态规划",动态规划给人像是作战时常用的“迂回战术”,或者说是

    游击战,在运动中寻找突破口。

    一: 思想

       首先要了解”动态规划“,必须先知道什么叫做”多阶段决策“,百科里面对这个问题解释的很全,我就load一段出来,

    大家得要好好品味,好好分析。

    上面图中最后一句话就定义了动态规划是要干什么的问题。

    二:使用规则

        现在我们知道动态规划要解决啥问题了,那么什么情况下我们该使用动态规划呢?

       ①  最优化原理(最优子结构性质):

               如果一个问题的最优策略它的子问题的策略也是最优的,则称该问题具有“最优子结构性质”。

       ②  无后效性:

               当一个问题被划分为多个决策阶段,那么前一个阶段的策略不会受到后一个阶段所做出策略的影响。

       ③  子问题的重叠性:

              这个性质揭露了动态规划的本质,解决冗余问题,重复的子问题我们可以记录下来供后阶段决策时

            直接使用,从而降低算法复杂度。

    三:求解步骤

          ①   描述最优解模型。

          ②   递归的定义最优解,也就是构造动态规划方程。

          ③   自底向上的计算最优解。

          ④   最后根据计算的最优值得出问题的最佳策略。

    四:与其他算法的差异

         ① 递归:  递归采用的是“由上而下”的解题策略并带有可能的”子问题“重复调用,时间复杂度自然高。

                       而”动态规划“采用”自下而上“并带有临时存储器保存上一策略的最优解,空间换时间。

         ② 分治:  同样两者都是将问题划分为很多的子问题,不同的是”动态规划“中各子问题是相互联系的。

         ③ 贪心:  要注意的是贪心算法每走一步都是不可撤回的,而动态规划是在一个问题的多种策略中寻找

                       最优策略,所以动态规划中前一种策略可能会被后一种策略推翻。

    五:举例

      动态规划中,最经典最著名的例子莫过于”背包问题“,现有:

        苹果: 1kg    12¥

        梨子: 1kg     3¥

        葡萄: 1kg    10¥

        板栗: 1kg    25¥  

    现有一个背包,只能装3kg水果,那么如何得到物品价值最大化?

  • 相关阅读:
    TSQL--按某字段列分组,在将各组中某列合并成一行
    疑难杂症--SQL SERVER 2012下数据库内存异常回收
    TSQL--删除登陆相关的用户
    杂谈--一次”失败“问题处理过程
    layer.open如何关闭自身弹出窗口
    简单的Http请求数据保存到Hdfs
    layui栅格布局问题
    redis单机版安装
    redis详细配置文件
    批量修改mysql数据库引擎
  • 原文地址:https://www.cnblogs.com/mmcmmc/p/3946875.html
Copyright © 2011-2022 走看看