动态规划

来源:互联网 发布:如何优化企业资本结构 编辑:程序博客网 时间:2024/06/05 22:56

由递归到动态规划:

         在递归过程中,可能会有很多次重复计算,造成递归爆炸。若递归有n个参数,可定义一个n维的数组,数组的下标是递归函数参数的取值范围,数组元素的值是递归函数的返回值,这样就可以从边界值开始,逐步填充数组,相当于计算递归函数值得逆过程。

 

动态规划一般解题思路:

1、将原问题分解成若干个子问题,子问题与原问题形式相同或类似,规模变小了。子问题都解决了,原问题即解决。子问题的解一旦求出就会被保存,所以每个子问题只需要求解一次。

2、确定状态。将和子问题相关的各个变量的一组取值称为一个状态。这个状态的值就是对应子问题的解。所有状态的集合构成问题的状态空间。状态空间的大小与实践复杂度直接相关,为状态数目乘以每个状态所需的时间。

3、确定初始状态

4、确定状态转移方程即如何从一个状态到另一个状态,可以用递推公式表示。

 

能用动态规划解决的问题的特点:

1、问题具有最优子结构性质,即如果问题的最优解所包含的子问题解也是最优的。

2、后无效性。当前的若干个状态值一旦确定,则伺候过程的演变就只和这若干个状态的值有关,和之前采取那条路径到达当前若干个状态没有关系。

 

 

动态规划的两种形式:

1、递归型:可能会因为递归层数太深而爆栈,无法使用滚动数组节省空间,比递推型慢

2、递推型:效率高,有可能使用滚动数组节省空间。由多重循环代替递推。

原创粉丝点击