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

    动态规划问题思考方向:

    1、思考状态(重点)

    状态的定义,先尝试「题目问什么,就把什么设置为状态」;
    然后思考「状态如何转移」,如果「状态转移方程」不容易得到,尝试修改定义,目的依然是为了方便得到「状态转移方程」。
    「状态转移方程」是原始问题的不同规模的子问题的联系。即大问题的最优解如何由小问题的最优解得到。

    2、思考状态转移方程(核心、难点)

    状态转移方程是非常重要的,是动态规划的核心,也是难点;

    常见的推导技巧是:分类讨论。即:对状态空间进行分类;

    归纳「状态转移方程」是一个很灵活的事情,通常是具体问题具体分析;

    除了掌握经典的动态规划问题以外,还需要多做题;

    如果是针对面试,请自行把握难度。掌握常见问题的动态规划解法,理解动态规划解决问题,是从一个小规模问题出发,逐步得到大问题的解,并记录中间过程;

    「动态规划」方法依然是「空间换时间」思想的体现,常见的解决问题的过程很像在「填表」。

    3、思考初始化

    初始化是非常重要的,一步错,步步错。初始化状态一定要设置对,才可能得到正确的结果。

    角度 1:直接从状态的语义出发;

    角度 2:如果状态的语义不好思考,就考虑「状态转移方程」的边界需要什么样初始化的条件;

    角度 3:从「状态转移方程」方程的下标看是否需要多设置一行、一列表示「哨兵」(sentinel),这样可以避免一些特殊情况的讨论。

    4、思考输出

    有些时候是最后一个状态,有些时候可能会综合之前所有计算过的状态。

    5、思考优化空间(也可以叫做表格复用)

    「优化空间」会使得代码难于理解,且是的「状态」丢失原来的语义,初学的时候可以不一步到位。先把代码写正确是更重要;
    「优化空间」在有一种情况下是很有必要的,那就是状态空间非常庞大的时候(处理海量数据),此时空间不够用,就必须「优化空间」;
    非常经典的「优化空间」的典型问题是「0-1 背包」问题和「完全背包」问题。

    作者:liweiwei1419
    链接:https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zhong-xin-kuo-san-dong-tai-gui-hua-by-liweiwei1419/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    1、理论知识

    2、状态

    3、状态转移方程

    4、初始化

    5、输出

    6、考虑是否可以优化空间

     

    1、理论知识:

           用途:解决多阶段决策问题。

           特点1:重复子问题:由于存在大量重复子问题,才需要记录之前计算的结果

           特点2:最优子结构:不同规模问题之间的关系。

           特点3:无后效性:只记录阶段结果,而不关心这个结果是怎么来的,一般而言状态定义越仔细,就能越容易消除后效性。

           思路方向1:[自顶向下]递归+记忆法:少数问题这样做。

           思路方向2:[自底向上]递推求解:绝大多数问题都可以。

     2、状态:

     状态表示了求解问题的某个阶段,需要先看看题目问的能不能作为状态。

    什么状态好转移,就用什么状态,状态定义应该为转移方便服务

      3、状态转移方程

    重点、重点、重点:[分类讨论]。状态转移很多时候就是在做[分类讨论],把当前问题分成几个小问题,这些小问题的最优解构成了当前问题的最优解。需要尝试思考大问题如何分类。

     以上是leetcode里的一些经典问题。

    4、初始化

    5,输出

    6、考虑是否可以优化空间

  • 相关阅读:
    [linux] 使用markdown写文档
    [c/c++] C数据结构: 链表 Linked List
    Apache 2 : starting apache
    GNU/CPIO 学习小结
    lsof 命令小结
    在Linux中扩展磁盘容量(1)
    在linux中扩展磁盘容量(2)LVM
    RHEL6.0 QEMU/KVM 建立新的虚拟机之配置Birdged Networking
    NFS server down机或重启导致的NFS系统错误
    Build linux kernel Module
  • 原文地址:https://www.cnblogs.com/sbb-first-blog/p/13415695.html
Copyright © 2011-2022 走看看