浅谈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读写Excel文件方法介绍
Nov 22 Python
Python操作CouchDB数据库简单示例
Mar 10 Python
Python实现LRU算法的2种方法
Jun 24 Python
python制作websocket服务器实例分享
Nov 20 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
python五子棋游戏的设计与实现
Jun 18 Python
python3 深浅copy对比详解
Aug 12 Python
Django 请求Request的具体使用方法
Nov 11 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
Nov 15 Python
Python调用graphviz绘制结构化图形网络示例
Nov 22 Python
如何给Python代码进行加密
Jan 10 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 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 UTF8 文件的签名问题
2009/10/30 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
Use Word to Search for Files
2007/06/15 Javascript
javascript中检测变量的类型的代码
2010/12/28 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
基于Layui自定义模块的使用方法详解
2019/09/14 Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
2020/08/20 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
Python常用小技巧总结
2015/06/01 Python
使用Python生成随机密码的示例分享
2016/02/18 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
Django REST 异常处理详解
2020/07/15 Python
python3 re返回形式总结
2020/11/20 Python
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
标准毕业生自荐信范文
2013/11/04 职场文书
路政管理专业推荐信
2013/11/11 职场文书
外贸采购员求职的自我评价
2013/11/26 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
室内设计专业毕业生求职信
2014/05/02 职场文书
有关爱国演讲稿
2014/05/07 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
2019财务转正述职报告
2019/06/27 职场文书