动态规划是对分治算法的一种改善,当它发现分解出来的子问题有重叠时,使用自底向上的策略来避免重复计算,从而提高了算法的效率。其特点是在每次做出选择前,将所有选择的效果都进行计算,在此计算的基础上选出最优的选项,所以动态规划的每次选择都是最优的。但是,当可选项的数目巨大时,算法将不堪重负,所以在这种条件下,有必要采用新的算法。
贪心算法的基本策略:一步一步地构建问题的最优解,其中每一步均只考虑眼前的最优选择,即希望通过局部最优达到全局最优。与动态规划不同的是,贪心策略将待要解决的问题分解为一个子问题(而不是动态规划里面的多个子问题),这个选择加上对剩下子问题的最优解将合成对原问题的最优解。贪心算法对解空间进行搜索时,并不是搜遍所有的空间,而是在局部范围内进行择优选取,所以贪心算法最终找到的是一个可行解,而不是所有的解,而且贪心算法并不是总能获得最优解。但是如果一个问具有贪心选择性质,则可以保证贪心算法能够得到最优解。在使用贪心算法时,要抓住两个重要特征:
(1