浅谈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 14 Python
python numpy格式化打印的实例
May 14 Python
python3.x实现发送邮件功能
May 22 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
Django中使用session保持用户登陆连接的例子
Aug 06 Python
python批量读取文件名并写入txt文件中
Sep 05 Python
python爬虫之遍历单个域名
Nov 20 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
python 使用openpyxl读取excel数据
Feb 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实现WEB动态网页静态
2006/10/09 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
input按钮的事件处理大全
2010/12/10 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
JS实现文字掉落效果的方法
2015/05/06 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
vue - props 声明数组和对象操作
2020/07/30 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
介绍Python的Django框架中的QuerySets
2015/04/20 Python
Python中tell()方法的使用详解
2015/05/24 Python
浅谈Django REST Framework限速
2017/12/12 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
详解python3中的真值测试
2018/08/13 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
高级方案规划工程师岗位职责
2013/11/29 职场文书
安全教育心得体会
2013/12/29 职场文书
幼儿老师求职信
2014/06/30 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS