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

    暴力递归:
    1, 把问题转化为规模缩小了的同类问题的子问题
    2, 有明确的不需要继续进行递归的条件(base case)
    3, 有当得到了子问题的结果之后的决策过程 4, 不记录每一个
    子问题的解
    动态规划
    1, 从暴力递归中来
    2, 将每一个子问题的解记录下来, 避免重复计算
    3, 把暴力递归的过程, 抽象成了状态表达
    4, 并且存在化简状态表达, 使其更加简洁的可能

    递归可以改成动态规划的情况

    递归中有很多重复状态,且重复状态的到达它的状态无关(无后效性问题:在递归函数中可变参数确定了之后,返回值就确定的)

    但是汉诺塔,n皇后问题是有后效性问题

    利用递归改动态规划套路:

    1.确定dp表的大小(根据递归函数的可变参数确定dp表的维度,一维,二维,三维...)

    2.在dp[][]表中,首先将需要的位置标识出来

    3.回到递归函数中,在base case中,把不被依赖的位置填好

    4.然后分析普遍位置的依赖关系

      看依赖的位置如 i, j 这个状态需要依赖哪几个状态,如 i + 1, j 和 i, j+1这两个状态的关系,

    然后通过这个依赖关系,利用3步中的不被依赖的状态,倒推回去,得到2步中标识的位置

  • 相关阅读:
    用Javascript进行简单的Table点击排序.
    asp也来玩三层?
    用在JavaScript的RequestHelper
    一个JavaScript方法的演变
    自己动手,实现jQuery中的ImageCopper.
    notes on relations
    mutex and condition variable
    virtual destructor
    virtual inheritance
    一道概率题
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8965049.html
Copyright © 2011-2022 走看看