浅谈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 相关文章推荐
Ubuntu下安装PyV8
Mar 13 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
分析python动态规划的递归、非递归实现
Mar 04 Python
浅谈python中对于json写入txt文件的编码问题
Jun 07 Python
python如何实现一个刷网页小程序
Nov 27 Python
PyQt5根据控件Id获取控件对象的方法
Jun 25 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
python实现文件批量编码转换及注意事项
Oct 14 Python
Python读取分割压缩TXT文本文件实例
Feb 14 Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 Python
Python logging模块写入中文出现乱码
May 21 Python
PyCharm 光标变成黑块的解决方式
Feb 06 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函数的实现原理及性能分析(三)
2015/05/13 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
JQuery操作三大控件(下拉,单选,复选)的方法
2013/08/06 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
2017/02/09 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
决策树的python实现方法
2014/11/18 Python
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
对python3 一组数值的归一化处理方法详解
2018/07/11 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
pytorch中的inference使用实例
2020/02/20 Python
python实现猜数游戏
2020/03/27 Python
python多进程使用函数封装实例
2020/05/02 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
高中生班主任评语
2014/04/25 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书
2014年质检工作总结
2014/11/26 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
解析mybatis-plus中的resultMap简单使用
2021/11/23 Java/Android