浅谈Python实现贪心算法与活动安排问题


Posted in Python onDecember 19, 2017

贪心算法

原理:在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。

特性:贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪婪法不要回溯。能够用贪心算法求解的问题一般具有两个重要特性:贪心选择性质和最优子结构性质。

如题:给出一组活动,告诉每个活动的开始时间和结束时间,要求出算出能参加的最多活动的数量或者活动的起止时间

贪心算法思路:

用两个数组s,f分别存储活动的起止时间,根据活动的结束时间对活动进行一个非减的活动序列,同样活动的开始时间list也要做对应的调整,这里博主是通过冒泡排序同步交换的,举例:活动(1,4)(2,3)(3,5)那么我们得到的

s = [2,1,3] 
f = [3,4,5]

通过比较下一个活动的开始时间与上一个活动的结束时间的大小关系,确定这两个活动是否是相容的,如果开始时间大于结束时间,则相容,反之不相容,代码如下

#用冒泡排序对结束时间进行排序,同时得到对应的开始时间的list
def bubble_sort(s,f):
  for i in range(len(f)):
    for j in range(0,len(f)-i-1):
      if f[j] > f[j+1]:
        f[j], f[j+1] = f[j+1],f[j]
        s[j],s[j+1] = s[j+1],s[j]
  return s,f

def greedy(s,f,n):
  a = [True for x in range(n)]
  #初始选择第一个活动
  j = 0
  for i in range(1,n):
    #如果下一个活动的开始时间大于等于上个活动的结束时间
    if s[i] >= f[j]:
      a[i] = True
      j = i
    else:
      a[i] = False
  return a

n = int(input())
arr = input().split()
s = []
f = []
for ar in arr:
  ar = ar[1:-1]
  start = int(ar.split(',')[0])
  end = int(ar.split(',')[1])
  s.append(start)
  f.append(end)

s,f = bubble_sort(s,f)
A = greedy(s,f,n)

res = []
for k in range(len(A)):
  if A[k]:
    res.append('({},{})'.format(s[k],f[k]))
print(' '.join(res))

执行结果如下:输入11个活动的起止时间,输出相容的活动的起止时间

浅谈Python实现贪心算法与活动安排问题

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

Python 相关文章推荐
python中sets模块的用法实例
Sep 30 Python
浅谈用VSCode写python的正确姿势
Dec 16 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
python3 selenium 切换窗口的几种方法小结
May 21 Python
解析Python的缩进规则的使用
Jan 16 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
提升Python效率之使用循环机制代替递归函数
Jul 23 Python
python的re模块使用方法详解
Jul 26 Python
python多线程案例之多任务copy文件完整实例
Oct 29 Python
Tensorflow限制CPU个数实例
Feb 06 Python
Python爬虫实现vip电影下载的示例代码
Apr 20 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
Nov 18 Python
Python实现感知器模型、两层神经网络
Dec 19 #Python
python实现感知器
Dec 19 #Python
python绘制简单折线图代码示例
Dec 19 #Python
matplotlib设置legend图例代码示例
Dec 19 #Python
matplotlib中legend位置调整解析
Dec 19 #Python
python实现感知器算法详解
Dec 19 #Python
python绘制条形图方法代码详解
Dec 19 #Python
You might like
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
php验证身份证号码正确性的函数
2016/07/20 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
JS 实现导航栏悬停效果
2013/09/23 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
jQuery绑定自定义事件的魔法升级版
2016/06/30 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
Python实现最大子序和的方法示例
2019/07/05 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
python绘制封闭多边形教程
2020/02/18 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
物业管理公司实习生自我鉴定
2013/09/19 职场文书
2014婚礼司仪主持词
2014/03/14 职场文书
电视节目策划方案
2014/05/16 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
十周年庆典策划方案
2014/06/03 职场文书
西岭雪山导游词
2015/02/06 职场文书
清洁工岗位职责
2015/02/13 职场文书
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis