ICode9

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

【算法图解】——集合覆盖问题

2020-02-26 12:40:31  阅读:428  来源: 互联网

标签:set stations 电台 states 算法 station 集合 covered 图解


文章目录

集合覆盖问题

  • 覆盖问题要求不会重复——采用set()
  • 假设你要办一个广播电台,要让所有的8个州都听到,你要选择广播电台,如何选择尽可能少的广播电台
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

州集合,电台字典

# 包含所有州的集合
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()

电台选择

  • 以需要覆盖的州为循环条件
  • 每一次魂循环找出覆盖州最多的电台
# 反复循环直到需要的州变成0,以需要覆盖的州为循环条件
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
    
print(final_stations)

{‘kthree’, ‘ktwo’, ‘kfive’, ‘kone’}

我是小杨我就这样 发布了182 篇原创文章 · 获赞 45 · 访问量 1万+ 私信 关注

标签:set,stations,电台,states,算法,station,集合,covered,图解
来源: https://blog.csdn.net/weixin_44478378/article/details/104514461

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

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

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

ICode9版权所有