贪婪算法简介
假设你办了个广播节目,要让全美国50个州的听众都能听得到,为此, 你需要决定在哪些广播台播出。每个广播台台播出都需要费用,所以你需要尽可能地在更少的广播台播出节目。现有广播台名单如下:
每个广播台都覆盖不同的范围,但是有些是重复的
如何才能找出覆盖全美50个州的最小广播台集和呢?先提供一种方法:
(1)列出每种可能的广播台集和,称之为幂集,总共有2^n种集和
(2)找出这2^n种集和中覆盖全美50个州的最小集合。
以上算法的问题是计算所有集和的时间需要很多,假如有100个广播台,那么集和一共2^100次方,这可是一个非常大的数!
那么,有没有一种算法可以快速的解决这种类似的问题呢?有,就是贪婪算法。
贪婪算法是近似算法的一种,它的解决方法如下:
(1)选出一个广播台,这个广播台覆盖了最多的未覆盖州,即便这个广播台覆盖了一些已经覆盖的州也没有关系。
(2)重复第一步,直到覆盖了所有的州
只要简单的两步!而且贪婪算法的时间复杂度为O(n^2)