美文网首页
动态规划入门03

动态规划入门03

作者: qratosone | 来源:发表于2016-08-11 23:05 被阅读0次

从递归转换到动态规划

如果一个递归函数有n个参数,那就定义一个n维数组,数组的下标就是递归函数的取值范围,数组元素的值是递归函数的返回值。
从边界值开始,逐步填充数组,就相当于计算递归函数值的逆过程。
相当于一个从下到上的过程

DP的一般思路

1、把原问题分解成若干个子问题——当子问题全部解决的时候原问题即解决。子问题的解求出之后直接保存——每个子问题只求解一次。
2、确定状态
一个“状态”即为和子问题相关的各个变量的一组取值。一个“状态”对应于一个或者多个子问题,所谓“某个状态”的“值”,就是它所对应的子问题的解。
所有状态的集合,构成问题的“状态空间”——状态空间的大小与时间复杂度直接相关。对于数字三角形,一共有N(N+1)/2个数字,因此状态空间一共有N(N+1)/2个状态。
对于数字三角形:
子问题——第i行j列的数字到底边的最大和
跟子问题相关的变量——i,j
状态——i,j的一组取值,即为状态对应的子问题
状态的值==子问题的解==(i,j)的最大和

有的时候K个整形变量构成一个状态,那么就用K维数组来存储各个状态的值——“值”可以是一个结构体。一个状态的值通常会是一个或者多个子问题的解。

3、确定一个初始状态(边界状态)的值
初始状态可以直接看出——对于数字三角形,初始状态就是底边数字,值即为底边数字的值

4、确定状态转移方程
找出不同状态之间如何转移——从一个已知状态到一个未知状态。即从一个或者多个“值”已知的状态,求出另一个未知状态的值——这个步骤可以用递推公式表示,即为状态转移方程

什么时候使用DP

1、问题具有最优子结构的性质——即问题的最优解所包含的子问题的解也是
最优的
2、无后效性——当前若干个状态的值不受路径影响,只跟状态有关

相关文章

  • 动态规划入门03

    从递归转换到动态规划 如果一个递归函数有n个参数,那就定义一个n维数组,数组的下标就是递归函数的取值范围,数组元素...

  • 这篇将动态规划的文章不错,大家可以看一下

    教你彻底学会动态规划——入门篇

  • 动态规划入门

    动态规划入门 动态规划(Dynamic programming, 简称DP), 通过把原问题分解为相对简单的子问题...

  • 算法与数据结构网址备忘

    kd-tree算法原理与开源代码实现 详解kd-tree 动态规划入门篇 动态规划进阶篇

  • 动态规划

    链接:很特别的一个动态规划入门教程动态规划与贪心算法的区别与联系 那么遇到问题如何用动态规划去解决呢?根据上面的分...

  • 动态规划03

    今天主要讨论如何解决高维的动态规划问题,即很难直接想出来递推关系。 美妙的栅栏 Richard just fini...

  • 动态规划入门

    算法简述 动态规划(dynamic programming, 简称dp)是一种应用十分广泛的算法。它可以理解成是对...

  • 动态规划入门

    伟大的acm大神谷哥教我学算法. 引例 斐波那契数 定义一个函数,f(x) = f(x-1) + f(x-2),x...

  • 动态规划入门

    1.什么是动态规划动态规划是在前面已有答案的基础上向下递推的过程 动态规划算法的两种形式上面已经知道动态规划算法的...

  • 动态规划1——入门

    动态规划(Dynamic Programming)题目特点 1. 计数 有多少种方式走到右下角 有多少种方法选出...

网友评论

      本文标题:动态规划入门03

      本文链接:https://www.haomeiwen.com/subject/zlmssttx.html