动态规划学习
Posted cos233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划学习相关的知识,希望对你有一定的参考价值。
转自慕课程序设计与算法(二)动态规划 ppt
一.递归到动规的一般转化方法
递归函数有n个参数就定义一个n维的数组, 数组的下标是递归函数参数的取值范围。
这样就可以从边界值开始逐步填充数组,相当于计算递归函数值的逆过程。eg:例题1数字三角形
二.动规解题的一般思路
1.将原问题分解为子问题
将原问题分解为若干个子问题,与原问题的形式相同或类似,只不过规模小了。
子问题都解决,原问题即解决。
子问题的解一旦求出就会被保存,所以每个子问题只要求解一次。
2.确定状态
状态:往往把和子问题相关的各个变量的一组取值称为一个状态。一个状态对应于一个或多个子问题
值:所谓某个状态下的值就是这个状态所对应的子问题的解
时间复杂度:整个问题的时间复杂度是状态数目乘以每个状态所需时间
存储:若K个整型变量能够构成一个状态,且取值范围分别为N1,N2,……,Nk,我们就可以用一个K维的数组array[N1][N2]……[Nk]来存储各个状态的“值”,这个值未必是一个整数或浮点数,甚至可能是需要一个结构表示的,故array可以是一个结构数组。
3.确定一些初始状态(边界状态)的值
4.确定状态转移方程
定义出什么是状态,以及在该状态下的值后,就要找出不同的状态之间如何迁移
即如何从一个或多个值已知的状态推出另一个状态的值("人人为我"递推型)。状态的迁移可以用递推公式表示,此递推公式也可称作"状态转移方程"
三.能用动规解决的问题的特点
1)问题具有最优子结构性质
最优子结构性质:如果问题的最优解所包含的子问题的解也是最优的,称其具有该性质
2)无后效性
当前的若干个状态值一旦确定,则此后过程的演变就只和这若干个状态的值有关,
与之前是采取哪种手段或经过哪条路径演变到当前这若干个状态无关
以上是关于动态规划学习的主要内容,如果未能解决你的问题,请参考以下文章