Python使用贪婪算法解决问题


Posted in Python onOctober 22, 2019

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()

4.循环

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'}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python获取脚本所在目录的正确方法
Apr 15 Python
Python中获取对象信息的方法
Apr 27 Python
Python函数中*args和**kwargs来传递变长参数的用法
Jan 26 Python
python实现井字棋游戏
Mar 30 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
对python实现合并两个排序链表的方法详解
Jan 23 Python
python反编译学习之字节码详解
May 19 Python
python numpy 常用随机数的产生方法的实现
Aug 21 Python
python程序需要编译吗
Jun 19 Python
Python pandas对excel的操作实现示例
Jul 21 Python
详解python的变量缓存机制
Jan 24 Python
python元组和字典的内建函数实例详解
Oct 22 #Python
Python List列表对象内置方法实例详解
Oct 22 #Python
Python序列对象与String类型内置方法详解
Oct 22 #Python
Python基本语法之运算符功能与用法详解
Oct 22 #Python
基于Python实现拆分和合并GIF动态图
Oct 22 #Python
python  logging日志打印过程解析
Oct 22 #Python
安装2019Pycharm最新版本的教程详解
Oct 22 #Python
You might like
PHP 遍历文件实现代码
2011/05/04 PHP
一个PHP验证码类代码分享(已封装成类)
2011/07/17 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
javascript 函数速查表
2010/02/07 Javascript
JavaScript 内置对象属性及方法集合
2010/07/04 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
JS控制伪元素的方法汇总
2016/04/06 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
JS+HTML5 canvas绘制验证码示例
2018/12/05 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
利用python获得时间的实例说明
2013/03/25 Python
常用python数据类型转换函数总结
2014/03/11 Python
Python编写百度贴吧的简单爬虫
2015/04/02 Python
python3 发送任意文件邮件的实例
2018/01/23 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
python 如何快速复制序列
2020/09/07 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
高清安全摄像头系统:Lorex Technology
2018/07/20 全球购物
Rossignol金鸡美国官网:始于1907年法国百年雪具品牌
2019/03/06 全球购物
汽车专业学生自我评价
2014/01/19 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
中班下学期个人总结
2015/02/12 职场文书
68句权威创业名言
2019/08/26 职场文书
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle