举例:
小偷是贪婪的,当去店里的时候,包里有35磅的空间。有下面三个物体可以选择,最优解肯定是2000+1500,但小偷可能搞不清楚,也没有时间。
贪婪算法:只要我能放得下,我选最贵的。选择放音箱,拿着就跑。
对小偷来说,拿着一个音箱,安全,快速,也不需要遍历商店里所有的东西,虽然不是最优解,但这种方法比较有效。
之前的寻找最短路径也是贪婪算法,
面对完全NP问题时,最佳的做法是使用近似算法。因为n个城市全部遍历完需要n!次
贪婪算法易于实现、运行速度快,是不错的近似算法。
# 需要覆盖的集合
states_needed = set(['mt','wa','or','id','nv','ut','ca','az'])
stations = {} # python中字典是一个哈希表,不能保证键的顺序
stations['kone'] = set(['id','nv','ut']) # key是电台名字,value是覆盖的洲
stations['ktwo'] = set(['wa','id','mt'])
stations['kthree'] = set(['or','nv','ca'])
stations['kfour'] = set(['nv','ut'])
stations['kfive'] = set(['ca','az'])
final_stations = set()
while states_needed: # states_needed 是八个州
best_station = None
states_covered = set() # set()是0
for station, states in stations.items(): # 这里放进去的顺序不一定是按上面的顺序,用三个州(1,2,3)比上8个州,结果就是三个州
covered = states_needed & states # covered 就是3个州
if len(covered) > len(states_covered): # 3>0
best_station = station
states_covered = covered
states_needed -= states_covered
final_stations.add(best_station)
print final_stations
运行结果如下
set(['ktwo', 'kthree', 'kone', 'kfive'])