浅谈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实现简单的可逆加密程序实例
Mar 05 Python
Python实现购物程序思路及代码
Jul 24 Python
python操作列表的函数使用代码详解
Dec 28 Python
简单实现python数独游戏
Mar 30 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
May 30 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
python 定义类时,实现内部方法的互相调用
Dec 25 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
python中random模块详解
Mar 01 Python
基于Python实现nc批量转tif格式
Aug 14 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
电脑硬件及电脑配置知识大全
2020/03/17 数码科技
PHP 源代码压缩小工具
2009/12/22 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
学习ExtJS Panel常用方法
2009/10/07 Javascript
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
mpvue小程序循环动画开启暂停的实现方法
2019/05/15 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python实现嵌套列表去重方法示例
2017/12/28 Python
完美解决安装完tensorflow后pip无法使用的问题
2018/06/11 Python
使用Python进行目录的对比方法
2018/11/01 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
详解Python locals()的陷阱
2019/03/26 Python
python如何查看安装了的模块
2020/06/23 Python
使用layui实现左侧菜单栏及动态操作tab项的方法
2020/11/10 HTML / CSS
英国二手物品交易网站:Preloved
2017/10/06 全球购物
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL