动态规划是运筹学的一个分支,是一种求解决策过程最优化的数学方法。
本质(个人理解):进行分治和处理冗余,适用于解决最优化问题(分治与递归相依相生,都知道递归效率慢,动态规划采用自底向上的方法,处理冗余就是对于重复出现的记录,后面需要时直接取值就好了,同时,题目是求解最优值的话,那么就是动态规划),像最短路径、资源分配、最优装载、库存管理等问题。
算法特点:
动态规划的最初是为了解决多阶段决策问题而诞生的,每个阶段以最优来一个阶段嵌套一个阶段产生最终的最优值。动态规划的本质是分治算法,即将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。但是,与分治法明显不同的是,适合于动态规划求解的问题,经分解后的得到的子问题(子问题的数目一般是多项式量级)往往不是相互独立的(与分治法子问题独立是不同的)。如果用分治法来解这类问题,由于子问题不相互独立,导致有些子问题被重复计算了多次,以至于最后解决原问题需要耗费指数类型的时间复杂度。
动态规划算法的思想之一就是保存已解决的子问题的结果,而在需要时直接获取已保存的结果,这样就可以避免大量的重复计算,从而得到多项式类型的时间复杂度的算法,因此把这种方法称之为带有记忆功能的分治法。这也是动态规划算法高效的原因之一。
但保存了重复子问题结果的分治法就构成了动态规划算法吗? 答案是否定的。这要从待解决问题的性质进行考虑。 如果待解决问题不进行最优的求解,仅仅由具有交叠的子问题组成,则可以简单采用上述带有记忆功能的分治法