贪婪算法

贪婪算法也称为最优算法,这种算法并不是最准确的答案,但确认最接近答案的近似算法。

这时候有人会问,不是最准确的答案我要她干嘛?但是在日常中,我们有时候会遇到一些我们无法处理的问题,甚至是要花费成吨的资源也无法很好解决的问题

这时候我们可以考虑使用近似算法,来节约资源这种简单方法解决

假如我们现在很富有,家里有好多地皮造房子,这时候你需要找最少的施工队伍去帮我们同时造房子

用贪婪算法我们要做的非常简单,只要两步:

(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之贪婪算法的更多相关文章

  1. python实现贪婪算法解决01背包问题

    一.背包问题 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2至Wn,与之相对应的价值为P1,P2至Pn.01背包是背包问题中最简单的问题.01背包的约束条件是给定几种物 ...

  2. python正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用

    先引入一下百度百科对于正则表达式的概念: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种 ...

  3. Python实现的贪婪算法

    个州的听众都收听到.为此,你需要决定在哪些广播台播出.在每个广播台播出都需要支出费用,因此你力图在尽可能少的广播台播出 # 1.创建一个列表,其中包含要覆盖的州 states_needed = set ...

  4. Python贪婪算法

    贪婪算法 每步均选择局部的最优解,重复此过程,最终即得到全局的最优解 简而言之就是每步都采用最优解 优点: 简单易行 缺点: 并非在所有情况下都奏效 经典的问题: 背包问题 集合覆盖问题 贪婪算法下的 ...

  5. 贪婪算法--Python

    贪婪算法:每步都采取最优的做法,即每步都选择局部最优解,最终得到的就是全局最优解. 假设你办了个广播节目,要让全美50个州的听众都收听得到.为此你需要决定在哪些广播台播出.在每个广播台播出都需要支付费 ...

  6. DNA序列组装(贪婪算法)

    生物信息学原理作业第四弹:DNA序列组装(贪婪算法) 原理:生物信息学(孙啸) 大致思想: 1. 找到权值最大的边: 2. 除去以最大权值边的起始顶点为起始顶点的边: 3. 除去以最大权值边为终点为终 ...

  7. 如何在Python中从零开始实现随机森林

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 决策树可能会受到高度变异的影响,使得结果对所使用的特定测试数据而言变得脆弱. 根据您的测试数据样本构建多个模型(称为套袋)可以减少这种差异,但是 ...

  8. python获取动态网站上面的动态加载的数据(初级)

    我们在处理一些网站数据的时候,有时候我们需要的数据很多都是动态加载的,而不都是静态的,以下以一个实例来介绍简单的获取动态数据,首先申明本人小白,还在学习python中,这个方法还是比较笨拙的,但是对于 ...

  9. 几种常见算法的Python实现

    1.选择排序 选择排序是一种简单直观的排序算法.它的原理是这样:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的后 ...

随机推荐

  1. C语言 | 栈的应用 | 非递归栈实现快排

    /* 非递归栈实现快排 */ #include <stdio.h> #include <math.h>> #include <malloc.h> #inclu ...

  2. .NET面试题整理

    .NET..NET Framework..NET Core和C#的解释各是什么? ASP.NET MVC和ASP.NET Web API的区别是什么? C#中的委托是什么?事件是不是一种委托? 简述P ...

  3. 直接使用sublime编译stylus

    stylus介绍 Stylus 是一个CSS的预处理框架,2010年产生,来自Node.js社区,主要用来给Node项目进行CSS预处理支持,所以 Stylus 是一种新型语言,可以创建健壮的.动态的 ...

  4. 检查浏览器支持Webp

    什么是Webp? Webp 是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8.根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使这 ...

  5. 《深入理解ES6》笔记—— JavaScript中的类class(9)

    ES5中的近类结构 ES5以及之前的版本,没有类的概念,但是聪明的JavaScript开发者,为了实现面向对象,创建了特殊的近类结构. ES5中创建类的方法:新建一个构造函数,定义一个方法并且赋值给构 ...

  6. javaweb之连接数据库

    最近做完了一个图书系统的增删改查,想着来总结一下这几个月的所学内容. 一.首先你需要在电脑上安装上mysql或者sql server(本文以mysql为例) mysql官网:MySQL :: Begi ...

  7. 项目中常用到的布局 flex

    1. 没header,footer固定 html<div class="page"> <div class="top"> <div ...

  8. 函数 装饰器 python

    今日内容概要 1.闭包函数 2.闭包函数的实际应用 3.装饰器简介(重点加难点) 4.简易版本装饰器 5.进阶版本装饰器 6.完整版本装饰器 7.装饰器模板(拷贝使用即可) 8.装饰器语法糖 9.装饰 ...

  9. DevC++ 报错[Error] Id returned 1 exit status

    DevC++ 报错[Error] Id returned 1 exit status 起因 学校机房的计算机总是二次编译总是报错 报错提示 [Error] Id returned 1 exit sta ...

  10. Java学习day17

    继续学习了IO流的一些常用类以及GUI基础 做了自己的第一个Frame窗口 在做第一个Frame窗口时程序报错:java: 无法从静态上下文中引用非静态 变量 this 查看后发现不小心把MyFram ...