贪婪算法

贪婪算法:

这是一种近似算法(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)
原文地址:https://www.cnblogs.com/pickKnow/p/10967069.html