主要内容 #
- 基本概念
- 基本思路
- 适用问题
- 实现框架
1. 基本概念 #
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。
这么说有点抽象,来举一个例子:
例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?
指定每次拿最大的,最终结果就是拿走最大数额的钱。
每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。
贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不会对所有问题都能得到整体最优解,选择贪心的策略必须具备无后效性,即某个状态以后的过程不回影响以前的状态,至于当前状态有关。
所以采用贪心策略一定要仔细分析其其是否满足无后效性。
2. 基本思路 #
1. 建立数学模型来描述问题。
2. 把求解的问题分成若干的问题。
3. 对每一个字问题求解,得到子问题的局部最优解。
4. 把子问题的局部最优解合成原来的问题。
3. 适用问题 #
贪心策略适用的前提是:局部最优策略能够导致产生全局最优解。
因为贪心算法只能通过解局部最优解的策略来达到全局最优解,因此,一定要注意判断问题是否适合采用贪心算法策略,找到的解是否一定是问题的最优解。
4. 实现框架 #
从一个问题的某一初始解出发; while(能够朝着总目标前进一步){ 利用可行的决策,求出一个可行解的解元素; } 由所有解元素组合成问题的一个可行解;