浅谈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通过smpt发送邮件的方法
Apr 30 Python
python实现的简单窗口倒计时界面实例
May 05 Python
Python编程中对super函数的正确理解和用法解析
Jul 02 Python
对Python进行数据分析_关于Package的安装问题
May 22 Python
python3爬取淘宝信息代码分析
Feb 10 Python
python获取酷狗音乐top500的下载地址 MP3格式
Apr 17 Python
python 美化输出信息的实例
Oct 15 Python
Pytorch加载部分预训练模型的参数实例
Aug 18 Python
python opencv调用笔记本摄像头
Aug 28 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
如何用Anaconda搭建虚拟环境并创建Django项目
Aug 02 Python
Python绘制词云图之可视化神器pyecharts的方法
Feb 23 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中基本符号及使用方法
2010/03/23 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
JS数组实现分类统计实例代码
2018/09/30 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
使用vue for时为什么要key【推荐】
2019/07/11 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
Javascript异步编程async实现过程详解
2020/04/02 Javascript
python修改注册表终止360进程实例
2014/10/13 Python
Python实现二维有序数组查找的方法
2016/04/27 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
Python3查找列表中重复元素的个数的3种方法详解
2020/02/13 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
C++是不是类型安全的
2014/02/18 面试题
解释一下钝化(Swap out)
2016/12/26 面试题
春节联欢晚会主持词
2014/03/24 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python
Vue如何清空对象
2022/03/03 Vue.js