贪心算法又叫贪婪算法,是指对问题进行求解时,在每一步选择中都采取最好或最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。
但是贪心算法所得到的的结果不一定是最优的结果(当然有时回事最优解),但其结果都是相对接近最优解的结果。
贪心算法最佳应用-集合覆盖
假设存在如下表所示的需要付费的广播台,以及广播台信号可以覆盖的地区,如何选择最少的广播台,让所有的地区都可以接收到信号
广播台 | 覆盖地区 |
---|---|
K1 | 北京,上海,天津 |
K2 | 广州,北京,深圳 |
K3 | 成都,上海,杭州 |
K4 | 上海,天津 |
K5 | 杭州,大连 |
此问题使用穷举法实现,效率很低,需要幂级别的时间复杂度。
那么使用贪心算法,其思路为:
- 遍历所有的电台,寻找一个覆盖最多未覆盖地区的电台(此电台可能包含一些已覆盖的地区,但没关系)
- 将这个电台加入到一个集合中,想办法把该电台覆盖的地区在下次比较时去掉。即下次寻找电台时,就不用再考虑这个电台覆盖的地区了。
- 重复第1步,直至覆盖所有地区