(1)蛮力算法:穷举所有情况,选择代价最小的一种情况
(2)动态规划算法:多阶段决策过程。每步求解的问题是后面阶段(下一步)求解问题的子问题。每步决策将依赖于以前步骤(上一步)的决策结果。(比如最短路径问题)
子问题界定:
必须满足一个前提条件:
一个反例:因为最后一段子问题的最短路径不在最终最短路径(动态规划的最终解)上
总而言之:
动态规划:求解过程是多阶段决策过程,每步处理一个子问题,可用于求解组合优化问题
动态规划的适用条件:问题要满足优化原则或最优子结构性质,即:一个最优决策序列结构的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列
贪心算法:挑选过程是多步判断,每步依据某种“短视”的策略(只看眼前)进行活动选择,选择时注意满足相应条件。
贪心算法的设计要素:
(1)贪心法适用于组合优化问题。
(2)求解过程是多步判断过程,最终的判断序列对应于问题的最优解。
(3)依据某种“短视的”贪心选择性质(也就是某种策略)判断,性质的好坏决定算法的成败。
(4)贪心法必须进行正确性证明。
(5)证明贪心法不正确的技巧:举反例。
总而言之:
贪心策略不一定得到最优解,在这种情况下可以有两种处理方法:
(1)参数化分析:分析参数取什么值可得到最优解
(2)估计贪心法得到的解在最坏情况下与最优解的误差
一个参数化分析的例子:找零钱问题(当只有1种、2种、3种零钱的时候,贪心法可得到最优解)