贪心,在生活中很常见,即我们在每一步、每一件事我们都要求尽善尽美
如在菜市场买菜的时候我们总是希望用最低的价格买到最好的菜
今天我们要学习的算法就是这样一个算法——贪心算法
概述
贪心算法是对完成一件事情的方法的描述,贪心算法每一次都做出当前看起来最好的选择,而不用考虑其它可能的选择。
贪心算法的学习可以与动态规划算法进行比较,看看它到底比动态规划算法少考虑了哪些子问题,为什么可以少考虑那些子问题,而每次只专注于求解一个子问题,通过逐步递推得到原问题的答案。
贪心算法的应用场景:
解决一个问题需要多个步骤,每一个步骤有多种选择。可以使用贪心算法解决的问题,每一步只需要解决一个子问题,只做出一种选择,就可以完成任务。
可以使用「贪心算法」的问题需要满足的条件:
最优子结构:规模较大的问题的解由规模较小的子问题的解组成,区别于「动态规划」,可以使用「贪心算法」的问题「规模较大的问题的解」只由其中一个「规模较小的子问题的解」决定;
无后效性:后面阶段的求解不会修改前面阶段已经计算好的结果;
贪心选择性质:从局部最优解可以得到全局最优解。