python之贪婪算法
贪婪算法
贪婪算法也称为最优算法,这种算法并不是最准确的答案,但确认最接近答案的近似算法。
这时候有人会问,不是最准确的答案我要她干嘛?但是在日常中,我们有时候会遇到一些我们无法处理的问题,甚至是要花费成吨的资源也无法很好解决的问题
这时候我们可以考虑使用近似算法,来节约资源这种简单方法解决
假如我们现在很富有,家里有好多地皮造房子,这时候你需要找最少的施工队伍去帮我们同时造房子
用贪婪算法我们要做的非常简单,只要两步:
(1) 选出这样一个施工队伍,即可以覆盖了最多的未覆盖地皮。即便这个施工队伍覆盖了一些已覆盖的地皮,也没有关系。
(2) 重复第一步,直到覆盖了我家所有的地皮。
我用拥有["杨浦","徐汇","崇明","虹口","黄浦","普陀","闵行","宝山"]地皮,为什么用set集合呢,因为我们每个区里有好几处地皮,用set可以帮助我们去重
现在一共有4个施工队伍,每个队伍负责的区域如下我放在一个字典里
house_haved =set( ["杨浦","徐汇","崇明","虹口","黄浦","普陀","闵行","宝山"] )
constructionTeam = {"one":set(["杨浦","徐汇","崇明"]),"two":set(["崇明","虹口","黄浦"]),"three":set(["虹口","黄浦"]),"four":set(["虹口","普陀","闵行","宝山"])}
创建一个用过存放最终结果的集合
final_teams=set()
循环取队伍判断能覆盖最多未覆盖的地区的队伍
每次for循环结束把队伍加入到最终结果里,再从拥有的地皮集合中减去已经覆盖到的地区,一直到所有房屋都被覆盖了(house_haved为空)
取house_haved和team_cover的交集和best_covered比较, 循环出best_covered
while house_haved :
best_team=None
best_covered = set()
for team , team_cover in constructionTeam.items():
covered = house_haved & team_cover
if len(covered) > len(best_covered):
best_team = team
best_covered = covered
final_teams.add(best_team)
house_haved -= best_covered
python之贪婪算法的更多相关文章
- python实现贪婪算法解决01背包问题
一.背包问题 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2至Wn,与之相对应的价值为P1,P2至Pn.01背包是背包问题中最简单的问题.01背包的约束条件是给定几种物 ...
- python正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用
先引入一下百度百科对于正则表达式的概念: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种 ...
- Python实现的贪婪算法
个州的听众都收听到.为此,你需要决定在哪些广播台播出.在每个广播台播出都需要支出费用,因此你力图在尽可能少的广播台播出 # 1.创建一个列表,其中包含要覆盖的州 states_needed = set ...
- Python贪婪算法
贪婪算法 每步均选择局部的最优解,重复此过程,最终即得到全局的最优解 简而言之就是每步都采用最优解 优点: 简单易行 缺点: 并非在所有情况下都奏效 经典的问题: 背包问题 集合覆盖问题 贪婪算法下的 ...
- 贪婪算法--Python
贪婪算法:每步都采取最优的做法,即每步都选择局部最优解,最终得到的就是全局最优解. 假设你办了个广播节目,要让全美50个州的听众都收听得到.为此你需要决定在哪些广播台播出.在每个广播台播出都需要支付费 ...
- DNA序列组装(贪婪算法)
生物信息学原理作业第四弹:DNA序列组装(贪婪算法) 原理:生物信息学(孙啸) 大致思想: 1. 找到权值最大的边: 2. 除去以最大权值边的起始顶点为起始顶点的边: 3. 除去以最大权值边为终点为终 ...
- 如何在Python中从零开始实现随机森林
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 决策树可能会受到高度变异的影响,使得结果对所使用的特定测试数据而言变得脆弱. 根据您的测试数据样本构建多个模型(称为套袋)可以减少这种差异,但是 ...
- python获取动态网站上面的动态加载的数据(初级)
我们在处理一些网站数据的时候,有时候我们需要的数据很多都是动态加载的,而不都是静态的,以下以一个实例来介绍简单的获取动态数据,首先申明本人小白,还在学习python中,这个方法还是比较笨拙的,但是对于 ...
- 几种常见算法的Python实现
1.选择排序 选择排序是一种简单直观的排序算法.它的原理是这样:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的后 ...
随机推荐
- scrapy --爬取媒体文件示例详解
scrapy 图片数据的爬取 基于scrapy进行图片数据的爬取: 在爬虫文件中只需要解析提取出图片地址,然后将地址提交给管道 配置文件中写入文件存储位置:IMAGES_STORE = './imgs ...
- .NET面试经典三问:什么是.NET?什么是.NET Framework?什么是.NET Core?
什么是.NET?什么是.NET Framework? 本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要 ...
- PC端操作系统、移动端操作系统、嵌入式操作系统
左侧部分已是历史的操作系统,右侧的还是活跃的操作系统.安卓系统Android 是Google开发的基于Linux平台的开源手机操作系统.它包括操作系统.用户界面和应用程序-- 移动电话工作所需的全部软 ...
- html5系列:form 2.0 新结构
以往的一个form表单,结构比较死板,所有的form元素都必须处在<form>和</form>之间才有效,这会造成一些麻烦,比如说:像bootstrap这种使用<div& ...
- 深入理解ES6之《扩展对象》
属性初始值的简写 当对象字面量只有一个属性的名称时,JS引擎会在可访问作用域中查找其同名变量:如果找到则该变量的值被赋给对象字面量里的同名属性 function createPerson(name, ...
- 来扯点ionic3[7] LocalStorage的使用—以登录和注销为例
一般意义上,一个互联网 APP 中的数据主自与服务器的交互,但是对于有些数据,我们希望获取到它们以后能保存,并在全局环境使用,比如用户数据--我们不希望在每个页面都从服务器拉取一遍.这时我们就可以利用 ...
- SQL语句总结---数据库操作
https://blog.csdn.net/hallomrzhang/article/details/85010014 数据库操作 查看所有数据库 show databases; 1 查看当前使用的数 ...
- 论文解读(Graph-MLP)《Graph-MLP: Node Classification without Message Passing in Graph》
论文信息 论文标题:Graph-MLP: Node Classification without Message Passing in Graph论文作者:Yang Hu, Haoxuan You, ...
- CTF大赛模拟-CFS三层内网漫游
CTF大赛模拟-CFS三层内网漫游 环境: 三台虚拟机,三个网络. target 1:192.168.161.178 ,192.168.52.132 (linux) target 2:192.168. ...
- GitHub Pages + Hexo搭建个人博客网站-github风格-采坑记录
目录 1.本机安装nodejs 2.github上创建仓库 3.安装hexo 4.hexo主题 5.配置主题 6.添加文章 7.使用分类和标签 8.增加文章目录 9.推送github 使用github ...