定义
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑。选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
基本思路
从问题的某一个初始解出发,每一步都要确保能获得局部最优解。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止。
过程分为四步:
1.建立数学模型来描述问题;
2.把求解的问题分成若干个子问题;
3.对每一子问题求解,得到子问题的局部最优解;
4.把子问题的解局部最优解合成原来解问题的一个解。
贪心算法与动态规划的区别
1.贪心算法的每一次操作都对结果产生直接影响,而动态规划则不是。
2.贪心算法对每个子问题的解决方案都做出选择,不能回退;动态规划则会根据以前的选择结果对当前进行选择,有回退功能。
3.动态规划主要运用于二维或三维问题,而贪心一般是一维问题
经典例题
一. 均分纸牌
洛谷OJ-P1031 均分纸牌
每次只考虑当前的一堆是否需要添加或者减少纸牌,若需要则向下一堆拿取或移除纸牌直到满足要求。然后遍历下一堆。