最优子结构:对比DFS,不是进行各种可选支路的试探,而是当下就可用某种策略确定选择,无需考虑未来(未来情况的演变也影响不了当下的选择)。只要一直这么选下去,就能得出最终的解,每一步都是当下(子问题)的最优解,那么最终得出的结果就是问题的最优解,这叫做最优子结构。
更书面的说法:如果问题的一个最优解中包含了子问题的最优解,则该问题具有最优子结构,具备这类结构的问题,可以用局部最优解来推导全局最优解,可以认为是一种剪枝法,是对“深度优先搜索”的优化。
贪心:由上一步的最优解推导下一步的最优解,而上一步之前的(历史)最优解不作保留。
思想:贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,他的选取应该满足局部优化的条件。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止。
过程:
1、建立数学模型来描述问题;
2、把求解的问题分成若干个子问题;
3、对每一子问题求解,得到子问题的局部最优解;
4、把子问题的解局部最优解合成原来解问题的一个解。
无论是在竞赛还是工作中还有一个重要的技巧就是根据示例的输入输出来反推解题思路。