浅谈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的WEB框架Flask中使用多个配置文件的解决方法
Apr 18 Python
Django权限机制实现代码详解
Feb 05 Python
分析python请求数据
Aug 19 Python
django项目搭建与Session使用详解
Oct 10 Python
Python3实现对列表按元组指定列进行排序的方法分析
Dec 22 Python
如何在Django中设置定时任务的方法示例
Jan 18 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
Python3几个常见问题的处理方法
Feb 26 Python
Django 框架模型操作入门教程
Nov 05 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
Dec 09 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 Python
用Python selenium实现淘宝抢单机器人
Jun 18 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中使用unset销毁变量并内存释放问题
2012/07/05 PHP
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
浅析javascript闭包 实例分析
2010/12/25 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
JavaScript模拟实现继承的方法
2015/03/30 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
vue实现登录拦截
2020/06/29 Javascript
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
pycharm创建scrapy项目教程及遇到的坑解析
2019/08/15 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
Python Django搭建网站流程图解
2020/06/13 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
台湾最大银发乐活百货:乐龄网
2018/05/21 全球购物
苹果台湾官网:Apple台湾
2019/01/05 全球购物
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
夜班门卫岗位职责
2013/12/09 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
python实现简单的井字棋
2021/05/26 Python