贪婪算法
完美是优秀最大的敌人
贪婪算法很简单:每步都采取最有的做法
贪婪算法寻找局部最优解,企图以这种方式获得全局最优解。
贪婪算法易于实现、运行速度快,是不错的近似算法。
# 表示需要覆盖的州 states_needed = set(["mt", "wa", "or", "id", "nv", "ut", "ca", "az"]) # 广播电台清单 stations = {} stations["kone"] = set(["id", "nv", "ut"]) 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: best_station = None states_covered = set() # 包含该广播电台覆盖的所有未覆盖的州 for station, states_for_station in stations.items(): covered = states_needed & states_for_station # 计算交集 if len(covered) > len(states_covered): best_station = station states_covered = covered final_stations.add(best_station) states_needed -= states_covered