贪婪算法:
这是一种近似算法(approximation algorithm)。在获得精确解需要的时间太长时,可使用近
似算法。判断近似算法优劣的标准如下:
速度有多快;
得到的近似解与最优解的接近程度。
贪婪算法是不错的选择,它们不仅简单,而且通常运行速度很快。在这个例子中,贪婪算法
的运行时间为O(n2),其中n为广播台数量。
问题:
每个广播电台,在固定几个州播放,现在向用最少的电台,将所有的州都覆盖
贪婪算法解决思路:在电台中找到一个最有解(未覆盖州中,电台指向最多的州),更新未覆盖的州,以此思路,知道所有的州都覆盖
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_station = set() def find_final_station(): global states_needed global stations best_station = None states_covered = set() for station_key, station_value in stations.items(): cover = states_needed & station_value if len(cover) > len(states_covered): best_station = station_key states_covered = station_value final_station.add(best_station) states_needed = states_needed - states_covered while states_needed: find_final_station() print(final_station)