浅谈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 面向对象 成员的访问约束
Dec 23 Python
python实现的一个p2p文件传输实例
Jun 04 Python
Windows下为Python安装Matplotlib模块
Nov 06 Python
Python使用正则表达式实现文本替换的方法
Apr 18 Python
Python入门_学会创建并调用函数的方法
May 16 Python
Window环境下Scrapy开发环境搭建
Nov 18 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
Python 内置变量和函数的查看及说明介绍
Dec 25 Python
Python中内建模块collections如何使用
May 27 Python
python简单实现9宫格图片实例
Sep 03 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
Jun 22 Python
Python 数据结构之十大经典排序算法一文通关
Oct 16 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动态创建Flash动画
2006/10/09 PHP
简单采集了yahoo的一些数据
2007/02/14 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
jquery tools之tabs 选项卡/页签
2009/07/25 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
express框架下使用session的方法
2019/07/31 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
详解python单例模式与metaclass
2016/01/15 Python
python select.select模块通信全过程解析
2017/09/20 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
淘宝活动策划方案
2014/02/06 职场文书
学生会离职感言
2014/02/11 职场文书
司机检讨书
2014/02/13 职场文书
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers