贪心算法与枚举法最大的不同就是在于每个子问题都选择最优的情况,然后继续往下进行,而且不能回头,枚举法就是在每个情况都了解的情况下来选择的最优解。举个例子说,有五家公司想要录用你,而他们开出的工资不同,贪心算法就是选择工资最高的那个;而枚举法就是可能把五家公司全都了解完成之后在选择最适合自己的,自己的最优解。
贪心算法是对问题求解时,不从整体考虑,而是选择一叶障目的方式,只选择某种意义上的局部最优解,并且,贪心算法是没有固定的模板可以遵循的,每个题目都有不同的贪心策略,所以算法设计的关键就是贪心策略的选择。贪心算法有一个必须要注意的事情。贪心算法对于问题的要求是,所有的选择必须是无后效性的,即当前的选择,不能影响后续选择对于结果的影响。
贪心算法的设计步骤
按照定义设计:
- 证明原问题的最优解之一可以由贪心选择得到。
- 将最优化问题转化为这样一个问题,即先做出选择,再解决剩下的一个子问题。
- 对每一子问题一一求解,得到子问题的局部最优解;
- 把子问题的解局部最优解合成原来解问题的一个解