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 相关文章推荐
urllib2自定义opener详解
Feb 07 Python
Python中使用PIPE操作Linux管道
Feb 04 Python
Python通过递归遍历出集合中所有元素的方法
Feb 25 Python
python使用chardet判断字符串编码的方法
Mar 13 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
对Python 数组的切片操作详解
Jul 02 Python
Python搭建代理IP池实现存储IP的方法
Oct 27 Python
python不使用for计算两组、多个矩形两两间的iou方式
Jan 18 Python
django模板获取list中指定索引的值方式
May 14 Python
python zip()函数的使用示例
Sep 23 Python
python简单实现插入排序实例代码
Dec 16 Python
Python中的min及返回最小值索引的操作
May 10 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
PHP里的中文变量说明
2011/07/23 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
Smarty分页实现方法完整实例
2016/05/11 PHP
php array_values 返回数组的值实例详解
2016/11/17 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
python操作xml文件详细介绍
2014/06/09 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
python实现文字版扫雷
2020/04/24 Python
Python3实现飞机大战游戏
2020/04/24 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
python打开文件的方式有哪些
2020/06/29 Python
原装进口全世界:天猫国际
2016/08/03 全球购物
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
总经理文秘岗位职责
2014/02/03 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
应聘教师自荐书
2014/06/16 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
运动会班级前导词
2015/07/20 职场文书
婚宴致辞
2015/07/28 职场文书
2016年村党支部公开承诺书
2016/03/24 职场文书