python 贪心算法的实现


Posted in Python onSeptember 18, 2020

贪心算法

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

基本思路

思想

贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,他的选取应该满足局部优化的条件。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止 。

步骤

  1. 遍历初始集合X中的备选元素
  2. 利用贪心策略在X中确定一个元素,并将其加入到可行解S中
  3. 得到可行解S

python 贪心算法的实现

P即为贪心策略,用来选择符合条件的元素。

例子——硬币找零

假设某国硬币面值有1,5,10,25,100元五种面额,若店员为顾客找零时,需要给顾客找零a=36元,求硬币数最少的情况。

python 贪心算法的实现

这里我们的贪心策略为:

先找到最接近a的值,然后对a进行更新,然后进行循环。

代码实现

def shortNum(a):
  coins = [1,5,10,25,100]
  out = []
  coins = coins[::-1]

  for i in coins:
    num = a//i
    out=out+[i,]*num
    a = a-num*i
    if a<=0:
      break
  return out
a = 36
print(shortNum(a))

例子——任务规划

问题描述:

输入为任务集合X= [r1,r2,r3,...,rn],每个任务ri,都对应着一个起始时间ai与结束时间bi

要求输出为最多的相容的任务集。

python 贪心算法的实现

 如上图,r1与r2相容,r3与r1和r2都不相容。

那么这里的贪心策略我们可以设为:

  1. 先将结束时间最短的任务加入到S中,
  2. 再从剩下的任务的任务中选择结束时间最短的,且判断与S集合中的任务是否相容
  3. 若不相容,则换下一个时间最短的任务,并进行比较
  4. 循环,直至X为空。

代码实现

# 任务规划
from collections import OrderedDict
task = OrderedDict()
task['r1'] = [0,4]
task['r2'] = [5,8]
task['r3'] = [10,13]
task['r4'] = [15,18]
task['r5'] = [7,11]
task['r6'] = [2,6]
task['r7'] = [2,6]
task['r8'] = [2,6]
task['r9'] = [12,16]
task['r10'] = [12,16]
task['r11'] = [12,16]
task['r12'] = [0,3]


listTask = list(task.items())
# 根据bi进行排序,结束时间早的在前面(冒泡排序)
for i in range(len(listTask)-1):
  for j in range(len(listTask)-i-1):
    if listTask[j][1][1] > listTask[j+1][1][1]:
      listTask[j],listTask[j+1]=listTask[j+1],listTask[j]
print(listTask)
out = []
out.append(listTask.pop(0))
def isValid(temp,out):
  for k in range(len(out)):
    if temp[1][0]<out[k][1][1]:
      # 相交
      return False
  return True

for j in range(len(listTask)):
  temp = listTask.pop(0)
  # 判断是否相交
  #   相交则continue
  #   不相交则out.append(temp)
  for k in range(len(out)):
    if isValid(temp,out):
      out.append(temp)
    # else:continue 语句可以不写
    else:
      continue
print(out)

以上就是python 贪心算法的实现的详细内容,更多关于python 贪心算法的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
Apr 09 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
May 05 Python
Python如何判断数独是否合法
Sep 08 Python
Python程序中设置HTTP代理
Nov 06 Python
为什么Python中没有&quot;a++&quot;这种写法
Nov 27 Python
python对列进行平移变换的方法(shift)
Jan 10 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
Jan 24 Python
python实现kNN算法识别手写体数字的示例代码
Aug 16 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
Sep 24 Python
python判断两个序列的成员是否一样的实例代码
Mar 01 Python
python3 deque 双向队列创建与使用方法分析
Mar 24 Python
Python爬虫入门教程01之爬取豆瓣Top电影
Jan 24 Python
详解KMP算法以及python如何实现
Sep 18 #Python
python实现二分查找算法
Sep 18 #Python
Python自定义sorted排序实现方法详解
Sep 18 #Python
python爬虫爬取网页数据并解析数据
Sep 18 #Python
Python实现迪杰斯特拉算法过程解析
Sep 18 #Python
Python 操作 MySQL数据库
Sep 18 #Python
python实现人工蜂群算法
Sep 18 #Python
You might like
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
十天学会php之第三天
2006/10/09 PHP
php array_walk() 数组函数
2011/07/12 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
php生成验证码函数
2015/10/20 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
javascript天然的迭代器
2010/10/29 Javascript
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
javascript打印输出json实例
2013/11/11 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
Python hashlib模块的使用示例
2020/10/09 Python
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
汽车专业人才自我鉴定范文
2013/12/29 职场文书
同学会主持词
2014/03/18 职场文书
社团活动总结书
2014/06/27 职场文书
考试作弊检讨书范文
2015/01/27 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
《分数乘法》教学反思
2016/02/24 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python