最优子结构:一个问题的最优解包含其子问题的最优解
不同问题领域,最优子结构的不同体现在两个方面:
原问题的最优解中涉及多少个子问题
在确定最优解使用哪些子问题时,我们需要考察多少种选择
例:钢条切割问题涉及到一个子问题(长度为n-i的钢条的最优切割),但必须考察i的n中不同取值
两个典型的问题
无权最短路径:满足最优子结构,子问题无关
无权最长简单路径【不存在环】:不满足最优子结构,子问题相关,比如求q到t的最长简单路径,分解为q->r和r->t的最长简单路径;其中q->r可能包含顶点t,因此造成最终组合的解存在环路,从而不满足简单路径的要求
子问题重叠:递归算法反复求解相同的子问题
重构最优解:将每个子问题所做的选择存在一个表中