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 相关文章推荐
python在多玩图片上下载妹子图的实现代码
Aug 13 Python
用Python计算三角函数之atan()方法的使用
May 15 Python
实例讲解Python中global语句下全局变量的值的修改
Jun 16 Python
Django URL传递参数的方法总结
Aug 28 Python
python生成随机图形验证码详解
Nov 08 Python
Python多层装饰器用法实例分析
Feb 09 Python
详解Python中where()函数的用法
Mar 27 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
python计算二维矩形IOU实例
Jan 18 Python
python logging.info在终端没输出的解决
May 12 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
python爬取网页版QQ空间,生成各类图表
Jun 02 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
德生PL990的分析评价
2021/03/02 无线电
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
Prototype Function对象 学习
2009/07/12 Javascript
从jquery的过滤器.filter()方法想到的
2013/09/29 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
js实现随机8位验证码
2020/07/24 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
Python虚拟环境的原理及使用详解
2019/07/02 Python
简单介绍python封装的基本知识
2019/08/10 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
护理学毕业生求职信
2013/11/14 职场文书
人代会标语
2014/06/30 职场文书
观后感格式
2015/06/19 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
公司员工离职感言
2015/08/03 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers