浅谈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 08 Python
python解析发往本机的数据包示例 (解析数据包)
Jan 16 Python
python网络编程之文件下载实例分析
May 20 Python
python 数据的清理行为实例详解
Jul 12 Python
Python实现爬虫爬取NBA数据功能示例
May 28 Python
对python创建及引用动态变量名的示例讲解
Nov 10 Python
python numpy实现文件存取的示例代码
May 26 Python
python 获取等间隔的数组实例
Jul 04 Python
Django中自定义admin Xadmin的实现代码
Aug 09 Python
详解python logging日志传输
Jul 01 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
Jul 09 Python
Python如何解除一个装饰器
Aug 07 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数组中包含中文的排序方法
2014/06/03 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
用javascript判断IE版本号简单实用且向后兼容
2013/09/11 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
2015/03/18 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
2018/03/17 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python Sleep休眠函数使用简单实例
2015/02/02 Python
python3实现表白神器
2019/04/09 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
幼儿园庆六一游园活动方案
2014/01/29 职场文书
十八大感想感言
2014/02/10 职场文书
教师年终个人总结
2015/02/11 职场文书
校园安全教育心得体会
2016/01/15 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS