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步中标识的位置

  • 相关阅读:
    python+requests+excel 接口测试
    Pycharm配置git
    ubuntu16.04+ROS安装kinectV1
    ubuntu16.04安装有道词典
    ROS kinetic语音识别
    在Ubuntu16.04中python环境下实现tab键补全
    ros kinetic安装rbx1
    ubuntu14.04安装opencv3.1
    ubuntu16.04SSH无法连接
    VC6中函数点go to definition报告the symbol XXX is undefined
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8965049.html
Copyright © 2011-2022 走看看