ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

贪婪算法

2019-06-03 13:54:53  阅读:346  来源: 互联网

标签:set stations states needed 算法 station 贪婪 final


贪婪算法:

这是一种近似算法(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)

 

标签:set,stations,states,needed,算法,station,贪婪,final
来源: https://www.cnblogs.com/pickKnow/p/10967069.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有