浅谈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通过函数属性实现全局变量的方法
May 16 Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 Python
Python在图片中添加文字的两种方法
Apr 29 Python
python简单实现操作Mysql数据库
Jan 29 Python
python判断列表的连续数字范围并分块的方法
Nov 16 Python
对Python中的条件判断、循环以及循环的终止方法详解
Feb 08 Python
python 列表推导式使用详解
Aug 29 Python
python3中利用filter函数输出小于某个数的所有回文数实例
Nov 24 Python
TensorFLow 不同大小图片的TFrecords存取实例
Jan 20 Python
用Python绘制漫步图实例讲解
Feb 26 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 11 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设计模式之适配器模式原理与用法分析
2018/04/25 PHP
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
IE的有条件注释判定IE版本详解(附实例代码)
2012/01/04 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
Python实现嵌套列表去重方法示例
2017/12/28 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
Python标准库shutil用法实例详解
2018/08/13 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
母亲七十大寿答谢词
2014/01/18 职场文书
广告传媒专业应届生求职信
2014/03/01 职场文书
2014年3.15团委活动总结
2014/03/16 职场文书
签约仪式主持词
2014/03/19 职场文书
助理政工师申报材料
2014/06/03 职场文书
党员评议自我评价
2015/03/03 职场文书
nginx容器方式反向代理实战
2022/04/18 Servers