贪心算法

定义

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑。选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。


基本思路

从问题的某一个初始解出发,每一步都要确保能获得局部最优解。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止。

过程分为四步:
1.建立数学模型来描述问题;
2.把求解的问题分成若干个子问题;
3.对每一子问题求解,得到子问题的局部最优解;
4.把子问题的解局部最优解合成原来解问题的一个解。


贪心算法与动态规划的区别

1.贪心算法的每一次操作都对结果产生直接影响,而动态规划则不是。
2.贪心算法对每个子问题的解决方案都做出选择,不能回退;动态规划则会根据以前的选择结果对当前进行选择,有回退功能。
3.动态规划主要运用于二维或三维问题,而贪心一般是一维问题


经典例题


一. 均分纸牌

洛谷OJ-P1031 均分纸牌
每次只考虑当前的一堆是否需要添加或者减少纸牌,若需要则向下一堆拿取或移除纸牌直到满足要求。然后遍历下一堆。


二. 0-1背包问题


三. 马踏棋盘


你可能感兴趣的:(贪心算法)