浅谈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编程中基本的数学计算使用
Feb 04 Python
Python selenium 三种等待方式详解(必会)
Sep 15 Python
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
python+requests+unittest API接口测试实例(详解)
Jun 10 Python
numpy使用fromstring创建矩阵的实例
Jun 15 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
python print输出延时,让其立刻输出的方法
Jan 07 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
python时间序列数据转为timestamp格式的方法
Aug 03 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
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
PHP中创建和编辑Excel表格的方法
2018/09/13 PHP
Laravel 5.5 异常处理 & 错误日志的解决
2019/10/17 PHP
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
JavaScript 输入框内容格式验证代码
2010/02/11 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
解决Python一行输出不显示的问题
2018/12/03 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
环境工程大学生个人的自我评价
2013/10/08 职场文书
校庆接待方案
2014/03/18 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
自荐信模板大全
2015/03/27 职场文书
地道战观后感400字
2015/06/04 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书