动态规划算法的基本思想时将问题分解成多层个子问题。先求解子问题并将其记录,然后自底向上,从这些子问题求得原问题的解。

 如果用递归来求解的话,是自顶向下来求解的,动态规划和它相反,也就是说递归怎么来,动态规划就逆着来。

 求解动态规划的问题一般分这几个步骤:

  1.找出最优解的性质,并刻画其结构特征(从题目中寻找合适的量来表达)

  2.递归地定义最优值

  3.以自底向上的方式计算最优值(按递归的反向来)

  4.根据计算最优值时得到的信息,构造最优解

  总的来说就是从最小的子问题出发推出上层父问题,一直推到原问题。

一句话来表示就是寻找合适的结构,然后按照递归的反向逆着求解。

其中寻找合适的结构来递归表达最难,这里总结了下几种常见的情况:

1.像矩阵连乘问题,租用游艇问题,多边形游戏,凸多边形的最优三角分割问题这样的,寻找最优的断点来分割段,从而寻找最优解的

2.流水线作业调度,TSP问题这样,把剩下的子问题作为一个集合的

3.0-1背包问题,资源分配问题,xxxxx的

4.最长公共子序列,这个好像比较特别一点

其实就是和小学时做应用题一样,从题目中找出有用的量,拿来表示问题的解的结构这样。

results matching ""

    No results matching ""