浅谈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 16 Python
python中assert用法实例分析
Apr 30 Python
实例讲解Python中global语句下全局变量的值的修改
Jun 16 Python
Python面向对象编程中关于类和方法的学习笔记
Jun 30 Python
Python爬虫DNS解析缓存方法实例分析
Jun 02 Python
Python实现对百度云的文件上传(实例讲解)
Oct 21 Python
Python 读写文件的操作代码
Sep 20 Python
python点击鼠标获取坐标(Graphics)
Aug 10 Python
python实现多线程端口扫描
Aug 31 Python
python返回数组的索引实例
Nov 28 Python
Python 过滤错误log并导出的实例
Dec 26 Python
python字典的值可以修改吗
Jun 29 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危险函数(disable_functions)
2012/02/23 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
利用JS实现数字增长
2016/07/28 Javascript
在JSP中如何实现MD5加密的方法
2016/11/02 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
Python中apply函数的用法实例教程
2014/07/31 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
python使用多线程查询数据库的实现示例
2020/08/17 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
高中军训感想300字
2014/03/04 职场文书
教师年度考核评语
2014/04/28 职场文书
村主任群众路线个人对照检查材料
2014/09/26 职场文书
教师节标语大全
2014/10/07 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
领导干部学习心得体会
2016/01/23 职场文书
2019邀请函格式及范文
2019/05/20 职场文书