浅谈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执行get提交的方法
Apr 29 Python
Python实现数据库编程方法详解
Jun 09 Python
详解Python Socket网络编程
Jan 05 Python
Python正则简单实例分析
Mar 21 Python
Python2实现的LED大数字显示效果示例
Sep 04 Python
Python建立Map写Excel表实例解析
Jan 17 Python
Python中正则表达式的用法总结
Feb 22 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
Jun 19 Python
Python中类似于jquery的pyquery库用法分析
Dec 02 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
Python流程控制语句的深入讲解
Jun 15 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
php error_log 函数的使用
2009/04/13 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
asp 取文本框名称代码
2008/12/02 Javascript
javascript 关闭IE6、IE7
2009/06/01 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
javascript每日必学之运算符
2016/02/16 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
关于webpack2和模块打包的新手指南(小结)
2017/08/07 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
使用nodejs实现JSON文件自动转Excel的工具(推荐)
2020/06/24 NodeJs
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
Python采用Django开发自己的博客系统
2020/09/29 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
python使用Matplotlib画条形图
2020/03/25 Python
python 表格打印代码实例解析
2019/10/12 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
美国受信赖的教育产品供应商:Nest Learning
2018/06/14 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
指导教师评语
2014/04/26 职场文书
学生个人总结范文
2015/02/15 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
小学六年级毕业感言
2015/07/30 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书