动态规划算法(Dynamic Programming)

动态规划算法(Dynamic Programming)以及相关问题

1.介绍

动态规划是解决多阶段决策过程最优化的一种有效的数学方法,他是美国学者Richard.bellman在1951年提出的,1957年他的专著《动态规划》的问世标志着运筹学的一个重要分支—-动态规划的诞生。
  
所谓多阶段决策问题是指这样一类问题,该问题的决策过程时一种在多个相互联系的阶段分别作出决策以形成序列决策的过程,而这些决策均是根据总体最优化这一共同的目标而采取的。

**基本思想: **
把一个较复杂的问题按照阶段划分,分解为若干个较小的局部问题,然后按照局部问题的递推关系,依次作出一系列决策,直至整个问题达到总体最优的目标。

动态规划包含三个重要的概念:
-最优子结构
-边界
-状态转移方程

解题的一般步骤是:
1.找出最优解的性质,刻画其结构特征和最优子结构特征;
2.递归地定义最优值,刻画原问题解与子问题解间的关系;
3.以自底向上的方式计算出各个子问题、原问题的最优值,并避免子问题的重复计算;
4.根据计算最优值时得到的信息,构造最优解。

使用动态规划特征:
1.求一个问题的最优解
2.大问题可以分解为子问题,子问题还有重叠的更小的子问题
3.整体问题最优解取决于子问题的最优解(状态转移方程)
4.从上往下分析问题,从下往上解决问题
5.讨论底层的边界问题

2.相关问题

链接:
找钱问题:
https://blog.csdn.net/a909301740/article/details/79940697

最长公共子序列:
https://blog.csdn.net/mengmengdastyle/article/details/81809103

最长递增子序列
原序列为L1
L2 = sort(L1) 将其从小到大排序
再将L2 对 L1 进行最长公共子序列
得到的结果为最长递增子序列。

集合分区问题
分区个数:
https://blog.csdn.net/jiyanfeng1/article/details/39314261

平衡分区:
如果要求分成n个区域
可以先把问题变成 S/n 个区域 再用背包问题解决
参考:
https://blog.csdn.net/sinat_36246371/article/details/52914049

编辑距离问题(Edit Distance)
http://www.cnblogs.com/littlepanpc/p/7895810.html

其他问题:

  1. https://blog.csdn.net/mengmengdastyle/article/details/81809103
  2. https://www.cnblogs.com/wuyuegb2312/p/3281264.html#q1

你可能感兴趣的:(算法)