zoukankan      html  css  js  c++  java
  • leetcode 总结 动态规划问题小结

    动态规划 

    动态规划对于子问题重叠的情况特别有效,因为它将子问题的解保存在表格,当需要某个子问题的解

    时,直接取值即可,从而避免重复计算。

    基本思路与策略

    基本思想与分治法类似,也是将带求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前子问题的解,为后子问题

    的求解提供了有用的信息。在求解任一子问题时,列出各种问题的局部解。

    动态规划中的子问题往往不是相互独立的,在求解的过程中,许多子问题的解被反复使用。为了避免重复计算。动态规划采用l

    了填表来保存子问题解的方法。

    3.适用情况:

    1)两个必要的要素

    适合应用动态规划方法求解的最优化问题应该具备两个重要的要素:最优子结构和子问题重叠。

    最优子结构;问题的最优解相关子问题的最优解组合而成,并且可以独立求解子问题。

    子问题重叠:递归过程反复的在求解相同的子问题。

    三个性质

    能采用动态规划求解的问题一般要具有3个性质:

    (a)最优化原理:

    如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。

    (b)无后效性:即某阶段状态(定义的新子问题)一旦确定,就不受这个状态以后决策的影响。

    也就是说,某状态以后的过程不会影响以前的状态,只与其以前的状态有关。

    (c)有重叠子问题:即子问题之间是不独立的(分治法是独立的),一个子问题在下一阶段决策中可能被多次使用到。

    该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势。

    4.求解的基本步骤:

    实际应用中可以按一下几个简化的步骤进行设计:

    (1)分析最优解的性质,并刻画其结构特征,这一步的开始时一定要从子问题入手。

    (2)定义最优解变量,定义递归最优解公式

    (3)以自底向上计算出最优值(或自顶向下的记忆化方式(即备忘录法))

       (4)根据计算最优值时得到的信息,构造问题的最优解

    二. 动态规划的自我总结

    三.分析几个经典的动态规划例子

    例子1.最长回文字符串

  • 相关阅读:
    Python 中的Lock与RLock
    Python 自定义三方库
    Python 通过RSA实现license验证设备指纹与有效期
    Python 通过wmi获取Window服务器硬件信息
    Java List对象集合按对象属性分组、分组汇总、过滤等操作示例
    BrokenPipeError: [Errno 32] Broken pipe
    Python 通过dmidecode获取Linux服务器硬件信息
    Linux 解决E: Sub-process /usr/bin/dpkg returned an error code (1)错误
    Ubuntu 增加新用户并赋予root权限及免密的方法
    关于smali插桩
  • 原文地址:https://www.cnblogs.com/heruonan/p/8341048.html
Copyright © 2011-2022 走看看