动态规划
来源:互联网 发布:如何优化企业资本结构 编辑:程序博客网 时间:2024/06/05 22:56
由递归到动态规划:
在递归过程中,可能会有很多次重复计算,造成递归爆炸。若递归有n个参数,可定义一个n维的数组,数组的下标是递归函数参数的取值范围,数组元素的值是递归函数的返回值,这样就可以从边界值开始,逐步填充数组,相当于计算递归函数值得逆过程。
动态规划一般解题思路:
1、将原问题分解成若干个子问题,子问题与原问题形式相同或类似,规模变小了。子问题都解决了,原问题即解决。子问题的解一旦求出就会被保存,所以每个子问题只需要求解一次。
2、确定状态。将和子问题相关的各个变量的一组取值称为一个状态。这个状态的值就是对应子问题的解。所有状态的集合构成问题的状态空间。状态空间的大小与实践复杂度直接相关,为状态数目乘以每个状态所需的时间。
3、确定初始状态
4、确定状态转移方程即如何从一个状态到另一个状态,可以用递推公式表示。
能用动态规划解决的问题的特点:
1、问题具有最优子结构性质,即如果问题的最优解所包含的子问题解也是最优的。
2、后无效性。当前的若干个状态值一旦确定,则伺候过程的演变就只和这若干个状态的值有关,和之前采取那条路径到达当前若干个状态没有关系。
动态规划的两种形式:
1、递归型:可能会因为递归层数太深而爆栈,无法使用滚动数组节省空间,比递推型慢
2、递推型:效率高,有可能使用滚动数组节省空间。由多重循环代替递推。
阅读全文
0 0
- 动态规划!!!动态规划!!!
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 动态规划
- 求出该年的第几天
- 最长上升子序列tyvj1049
- summary
- 数据库的四种隔离级别(转载)
- 《Modern Python Cookbook》(Python编程范例)笔记1.3大整数和小整数
- 动态规划
- 自定多框架適配加載框架
- centos 安装 docker 及基础命令使用
- HDU
- Runtime的入门与应用之六-实际运用
- logo在线制作
- java 反射
- 101. Symmetric Tree(DFS)
- 算法新启程