思考动态规划的第一点----最优子结构:
我们把这种子问题最优时母问题通过优化选择后一定最优的情况叫做“最优子结构”。
思考动态规划的第二点----子问题重叠:
我们把这种母问题与子问题本质上是同一个问题的情况称为“子问题重叠”。
思考动态规划的第三点----边界:
子问题最终有解
思考动态规划的第四点----子问题独立:
我们把这种一个母问题在对子问题选择时,当前被选择的子问题两两互不影响的情况叫做“子问题独立”。
思考动态规划的第五点----做备忘录:
我们可以把问题的解放在一个变量中,如果再次遇到这个问题就直接从变量中获得答案,因此每一个问题仅会计算一遍,如果不做备忘的话,动态规划就没有任何优势可言了。
面对问题要寻找动态规划的方法,首先要清楚一点,动态规划不是算法,它是一种方法,它是在一件事情发生的过程中寻找最优值的方法,因此,我们需要对这件事情所发生的过程进行考虑。而通常我们从过程的最后一步开始考虑,而不是先考虑过程的开始。
打个比方,上面的挖金矿问题,我们可以认为整个开采过程是从西至东进行开采的(也就是从第0座开始),那么总有面对最后一座金矿的时候(第9座),对这座金矿不外乎两个选择,开采与不开采,在最后一步确定时再去确定倒数第二步,直到考虑第0座金矿(过程的开始)。
而过程的开始,也就是考虑的最后一步,就是边界。
动态规划可看作一系列决策的问题