浅谈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登录pop3邮件服务器接收邮件的方法
Apr 30 Python
利用Python脚本实现ping百度和google的方法
Jan 24 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
python实现抽奖小程序
Apr 15 Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 Python
Python pickle模块实现对象序列化
Nov 22 Python
python3.8下载及安装步骤详解
Jan 15 Python
tensorboard显示空白的解决
Feb 15 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
Feb 28 Python
Python猜数字算法题详解
Mar 01 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
如何正确理解python装饰器
Jun 15 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
PHP5函数小全(分享)
2013/06/06 PHP
PHP实现变色验证码实例
2014/01/06 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
关于js类的定义
2011/06/28 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
ES6 更易于继承的类语法的使用
2019/02/11 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
深入了解Python enumerate和zip
2020/07/16 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
应届毕业生自我鉴定范文
2013/12/27 职场文书
运动会广播稿60字
2014/01/15 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
2014年妇产科工作总结
2014/12/08 职场文书
车间统计员岗位职责
2015/04/14 职场文书
电工实训心得体会
2016/01/14 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
Python中glob库实现文件名的匹配
2021/06/18 Python