贪婪算法很简单:每步都采取最优的做法。你每步都选择局部最优解,最终得到的就是全局最优解。
贪婪算法并非在任何情况下都行之有效。
在有些情况下,完美是优秀的敌人。有时候,你只需找到一个能够大致解决问题的算法,此时贪婪算法正好可派上用场,因为它们实现起来很容易,得到的结果又与正确结果相当接近。
集合类似于列表,只是不能包含重复的元素。
集合运算:并集、交集和差集。
1.并集意味着将集合合并。
2.交集意味着找出两个集合中都有的元素。
3.差集意味着将从一个集合中剔除出现在另一个集合中的元素。
final_stations=set()
while states_need:
best_station=None
states_covered=set()
for station,states_for_station in stations.items():
covered=states_need & states_for_station#求交集
if len(covered)>len(states_covered):
best_station=station
states_covered=covered
states_need-=states_covered
final_stations.add(best_station)
NP完全问题的简单定义是, 以难解著称的问题, 如旅行商问题和集合覆盖问题。 很多非常聪明的人都认为, 根本不可能编写出可快速解决这些问题的算法。
判断NP完全问题:
原文:https://www.cnblogs.com/everfight/p/grokking_algorithms_note_8.html