# 使用Python实现贪婪算法
# 集合覆盖问题
# 假设你办了个广播节目,要让全美50个州的听众都收听到。为此,你需要决定在哪些广播台播出。在每个广播台播出都需要支出费用,因此你力图在尽可能少的广播台播出
# 1.创建一个列表,其中包含要覆盖的州
states_needed = set(["mt", "wa", "or", "id", "nv", "ut", "ca", "az"])
# 2.使用散列表表示可供选择的广播台清单
stations = dict() 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"])
# 3.使用集合来存储最终选择的广播台
final_stations = set()
# 5.循环
while states_needed:
# 遍历所有的广播台,从中选择覆盖最多的未覆盖州的广播台,将这个广播台存储在best_station中
best_station = None
# 这个集合包含该广播台覆盖的所有未覆盖的州
states_covered = set()
for station, states in stations.items():
covered = states_needed & states
if len(covered) > len(states_covered):
best_station = station
states_covered = covered
states_needed -= states_covered
final_stations.add(best_station) print(final_stations) # 结果为{'ktwo', 'kthree', 'kone', 'kfive'}

最新文章

  1. javascript 字符串数组链接
  2. (转载)如何借助KeePassX在Linux上管理多个密码
  3. ccc prefab
  4. c3p0的log4j配置
  5. Install ssdb-rocks on CentOS 6
  6. OpenGL在什么样的领域才是主角?
  7. angularjs2 学习笔记(三) 服务
  8. 两台笔记本搭建openvswitch网络
  9. java基础学习总结五(递归算法、冒泡排序、查看生成API)
  10. UE4中的单映射:TMap容器
  11. css之display:inline-block布局
  12. unity 使用方法
  13. mysql百万级全文索引及match快速查找
  14. Halcon 标定与准确测量
  15. asp.net mvc模板布局
  16. ETL testing
  17. URL列表
  18. 剑指offer-第六章面试中的各项能力(n个骰子的点数)
  19. 第六章 MySQL函数(待续)
  20. MySQL 基础数据类型优化(如何选择数据类型)

热门文章

  1. Anaconda3(1)Windows10下安装Anaconda3(64位)详细过程
  2. ESA2GJK1DH1K基础篇: 阿里云物联网平台: 云平台显示单片机采集的温湿度数据,控制设备继电器(基于GPRS模块,AT指令TCP_MQTT通信)
  3. ESA2GJK1DH1K基础篇: Android连接MQTT简单的Demo
  4. 网络协议 4 - 交换机与 VLAN:拓扑结构
  5. 有趣的js代码
  6. SEDA 架构
  7. Guava 源码分析之Cache的实现原理
  8. IDEA-Maven的Dependencies中出现红色波浪线
  9. 2018-2019-2 网络对抗技术 20165318 Exp 8 Web基础
  10. Java查询MySQL数据库指定数据库中所有表名、字段名、字段类型、字段长度、字段描述