贪心算法

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

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

基本思路

思想

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

步骤

遍历初始集合X中的备选元素

利用贪心策略在X中确定一个元素,并将其加入到可行解S中

得到可行解S

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

例子——硬币找零

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

这里我们的贪心策略为:

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

代码实现

defshortNum(a):

coins= [1,5,10,25,100]

out=[]

coins= coins[::-1]for i incoins:

num= a//i

out=out+[i,]*num

a= a-num*iif a<=0:break

returnout

a= 36

print(shortNum(a))

例子——任务规划

问题描述:

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

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

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

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

先将结束时间最短的任务加入到S中,

再从剩下的任务的任务中选择结束时间最短的,且判断与S集合中的任务是否相容

若不相容,则换下一个时间最短的任务,并进行比较

循环,直至X为空。

代码实现

#任务规划

from collections importOrderedDict

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))defisValid(temp,out):for k inrange(len(out)):if temp[1][0]

returnFalsereturnTruefor j inrange(len(listTask)):

temp=listTask.pop(0)#判断是否相交

#相交则continue

#不相交则out.append(temp)

for k inrange(len(out)):ifisValid(temp,out):

out.append(temp)#else:continue 语句可以不写

else:continue

print(out)

python贪心算法几个经典例子_Python笔试——贪心算法相关推荐

  1. python贪心算法几个经典例子_关于贪心算法的一些探讨、经典问题的解决和三种典型的贪心算法算法(哈弗曼,Kruskal,Prim)的Python实现。...

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

  2. python程序结构有哪几种_Python数据结构与算法(几种排序)小结

    Python数据结构与算法(几种排序) 数据结构与算法(Python) 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺 ...

  3. python实战经典例子_Python入门经典实例

    类和继承 class Base: def __init__(self): self.data = [] def add(self, x): self.data.append(x) def addtwi ...

  4. java贪心算法几个经典例子_经典算法思想5——贪心(greedy algorithm)

    贪心算法,是指在对问题求解时,总是做出再当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是某种意义上的局部最优解. 贪心算法没有固定算法框架,算法设计的关键是贪心策略的选择.必须注 ...

  5. Java算法大全_java贪心算法几个经典例子

    Java经典问题算法大全   /*[程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?  ...

  6. python实战经典例子_Python基础之列表常见操作经典实例详解

    本文实例讲述了Python基础之列表常见操作.分享给大家供大家参考,具体如下: Python中的列表操作 列表是Python中使用最频繁的数据类型[可以说没有之一] 一组有序项目的集合 可变的数据类型 ...

  7. python如何调用文件进行换位加密_python 换位密码算法的实例详解

    python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...

  8. python编写代码运用递归画图形_python数据结构与算法 22 递归图形

    上节中我们已经知道有些问题,如果用递归解决变得非常容易.但是仍然很难在大脑里形成一种模型或可视化的方法,让我们直觉地明白函数递归过程到底发生了什么.这一节我们引入几个例子,用递归的方法画几个有趣的图形 ...

  9. python新式类好还是经典类_python新式类和经典类的区别?

    python新式类和经典类的区别? 1)首先,写法不一样: class A: pass class B(object): pass 2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索. ...

  10. python用递归方式实现最大公约数_Python 最大公约数算法 - Python 3 基础教程

    Python3 实例 以下代码用于实现最大公约数算法: 实例(Python 3.0+) # Filename : test.py # author by : www.runoob.com # 定义一个 ...

最新文章

  1. python怎么输入代码-python中如何设置代码自动提示
  2. python程序员在公司都是做什么的-程序员是做什么的?工资待遇怎么样?
  3. NightWatchMan
  4. php5.4 session配置,Session
  5. 一次前后端分离的实践
  6. 自然场景人脸检测技术实践
  7. java演练 循环嵌套 菱形图案的打印 四个阶段完成输出
  8. 数据可视化系列(三):布局格式定方圆
  9. Ajax-jQuery_Ajax_实例 ($.ajax、$.post、$.get)
  10. 命令行开启一个unity实例和执行其中的脚本方法的使用和注意
  11. java扫描所有用户信息_监听器实现案例----自定义session扫描器和统计在线用户人数及用户信息...
  12. JRuby 1.6.0发布
  13. 这个严重漏洞可被滥用于破坏交通信号灯系统
  14. 【脑筋急转弯】—— 谁是诚实人?
  15. 程序员面试 IT 公司,这些地方你要注意!
  16. 在Angularjs中使用directive自定义指令实现attribute的继承
  17. 推荐几个代码自动生成器,神器!!!
  18. win10和win7鲁大师测试软件,实测:老电脑用Win7、Win10哪个流畅?
  19. 操作系统Clock算法
  20. php 安装 bzip2,brew install php bzip2 缺少

热门文章

  1. 【MyBatis框架】Lombok插件的安装及使用
  2. c语言plc编程软件下载,罗克韦尔plc编程软件下载-2017罗克韦尔plc编程软件V21.00 官方最新版 - 极光下载站...
  3. 天翼校园客户端拨号服务器无响应,天翼校园客户端问题总结及解决办法
  4. 硬件设备监控之Sigar的配置与使用
  5. C语言程序设计(第三版)何钦铭著 习题6-3
  6. 计算机编程语言的分类
  7. 屏幕取色器设计思路及源码
  8. mysql 服务器配置信息和运行状态的查看(show variables like)
  9. vmlinuz的产生
  10. 产品必备技能(五):如何使用商业画布分析一款产品?附实操报告