动态规划的思想
上一篇博文讲了分治法,这一篇的动态规划思想有些接近,但是两者最大区别是,动态规划要解决的子问题往往不是独立的,子问题往往被重复求解了很多次。所以一个叫朴素的想法是,把每个子问题的答案都保存下来,从而避免大量的重复计算。这种方法是典型的以空间换取时间。
动态规划的基本要素
最优子结构性质
最优子结构的性质指的是,问题的最优解包含着其子问题的最优解。利用该性质,自底向上递归地从子问题的解,逐步构造出整个问题的最优解。分治法和动态规划都具有这个性质。
重叠子问题
在最优子结构的前提下,产生的子问题如果总是被反复计算了很多次,那么这种性质就是子问题的重叠性质,这个也是动态规划和分治法最大的区别。
一般动态规划的做法都是,子问题的解都只需要解一次,并把子问题的解保存在一个数组(表格)中。通常子问题的个数随着问题的大小呈多项式增长,因此动态规划的算法只需要多项式时间。
应用举例
挖坑,坑的名字如下: