03-算法的乐趣-动态规划
2017-04-14 17:01
204 查看
动态规划
动态规划(Dynamic progamming)是解决多阶段决策问题常用的最优化理论。在最短路线,库存管理,资源分配,设备更新,排序,装载等问题上比较高效。动态规划的原理就是把多阶段决策过程转化为一些列的单阶段决策问题。动态规划适合求解多阶段(状态转换)决策问题的最优解,也可用于含有线性或非线性递推关系的最优解问题,但是这些问题必须满足必须满足最优化原理和子问题的“无后向性”。
最优化原理:最优化原理其实就是问题的最优子结构的性质,如果一个问题的最优子结构是不论过去状态和决策如何,对前面的决策所形成的状态而言,其后的决策必须构成最优策略。也就是说,不管之前决策是否是最优决策,都必须保证从现在开始的决策是之前决策基础上的最优决策,则这样的最优子结构就符合最优化原理。
无后向性(无后效性):所为“无后向性”,就是当各个阶段的子问题确定以后,对于某个特定阶段的子问题来说,它之前的各个阶段的子问题的决策只影响该阶段的决策,对该阶段之后的决策不产生影响,也就是说,每个阶段的决策仅受之决策的影响,但是不影响之后个阶段的决策。
动态规划的基本思想
分治法要求子问题是相互独立的,但是动态规划的子问题不是相互独立的,子问题之间通常有包含关系,甚至两个子问题可能包含相同的子子问题,子问题A由子问题C递推得到,子问题B也由子问题C递推得到,所以只需要对C求解一次,然后将其结果保存在一张表中(备忘录)。动态规划没有固定的实现模式,可以用带备忘录的递归方法实现,也可以根据堆叠子问题之间的递推公式用递推的方法实现。使用动态规划一般包含四个步骤:定义最优子问题,定义状态和状态转换方程以及确定边界条件。
相关文章推荐
- 算法导论学习--动态规划--LCS算法
- 算法 动态规划
- [算法] 推荐阅读:从动态规划新手到专家
- 算法学习_动态规划_Rod cutting
- 贪心算法和动态规划的思路及其Python实现
- 【转】分治法,动态规划及贪心算法感悟
- 常用算法二(动态规划)
- 【算法】动态规划-从小问题入手
- 算法(一) 动态规划
- 算法初探-动态规划(Dynamic Programming)
- 算法练习 动态规划 装配线调度
- 算法重拾之路——动态规划基础
- 程序员面试题精选100题(03)-子数组的最大和[算法]
- 用动态规划解--滑雪题 算法分析
- 算法复习笔记(分治法、动态规划、贪心算法)
- 【动态规划】字符串编辑距离(Levenshtein距离)算法
- 算法基础--动态规划
- 动态规划经典算法之装配站调度问题源代码
- 算法---->动态规划(一)
- 算法--动态规划