浅谈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生成验证码实例
Aug 21 Python
python使用cPickle模块序列化实例
Sep 25 Python
Python中用startswith()函数判断字符串开头的教程
Apr 07 Python
python实现逆波兰计算表达式实例详解
May 06 Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
使用 Python 实现文件递归遍历的三种方式
Jul 18 Python
浅析python中的迭代与迭代对象
Oct 08 Python
Django CBV类的用法详解
Jul 26 Python
Python列表list操作相关知识小结
Jan 29 Python
python3中sys.argv的实例用法
Apr 24 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
Jul 31 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 前一天或后一天的日期
2008/06/28 PHP
PHP 透明水印生成代码
2012/08/27 PHP
php gd等比例缩放压缩图片函数
2016/06/12 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
2015/11/17 Javascript
js 自带的sort() 方法全面了解
2016/08/16 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
JS实现图片点击后出现模态框效果
2017/05/03 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python操作gmail实例
2015/01/14 Python
Python实现保证只能运行一个脚本实例
2015/06/24 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
中英文自我评价语句
2013/12/20 职场文书
开服装店计划书
2014/08/15 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
沈阳故宫导游词
2015/01/31 职场文书
和谐拯救危机观后感
2015/06/15 职场文书
学校运动会简讯
2015/07/20 职场文书
吧主申请感言怎么写
2015/08/03 职场文书
公司费用报销管理制度
2015/08/04 职场文书
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python
Python之matplotlib绘制折线图
2022/04/13 Python
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL