python贪心算法几个经典例子_Python笔试——贪心算法
贪心算法
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
基本思路
思想
贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,他的选取应该满足局部优化的条件。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止 。
步骤
遍历初始集合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笔试——贪心算法相关推荐
- python贪心算法几个经典例子_关于贪心算法的一些探讨、经典问题的解决和三种典型的贪心算法算法(哈弗曼,Kruskal,Prim)的Python实现。...
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解. 贪心算法不是对所有问题都能得到整体最优解,关键是 ...
- python程序结构有哪几种_Python数据结构与算法(几种排序)小结
Python数据结构与算法(几种排序) 数据结构与算法(Python) 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺 ...
- python实战经典例子_Python入门经典实例
类和继承 class Base: def __init__(self): self.data = [] def add(self, x): self.data.append(x) def addtwi ...
- java贪心算法几个经典例子_经典算法思想5——贪心(greedy algorithm)
贪心算法,是指在对问题求解时,总是做出再当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是某种意义上的局部最优解. 贪心算法没有固定算法框架,算法设计的关键是贪心策略的选择.必须注 ...
- Java算法大全_java贪心算法几个经典例子
Java经典问题算法大全 /*[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? ...
- python实战经典例子_Python基础之列表常见操作经典实例详解
本文实例讲述了Python基础之列表常见操作.分享给大家供大家参考,具体如下: Python中的列表操作 列表是Python中使用最频繁的数据类型[可以说没有之一] 一组有序项目的集合 可变的数据类型 ...
- python如何调用文件进行换位加密_python 换位密码算法的实例详解
python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...
- python编写代码运用递归画图形_python数据结构与算法 22 递归图形
上节中我们已经知道有些问题,如果用递归解决变得非常容易.但是仍然很难在大脑里形成一种模型或可视化的方法,让我们直觉地明白函数递归过程到底发生了什么.这一节我们引入几个例子,用递归的方法画几个有趣的图形 ...
- python新式类好还是经典类_python新式类和经典类的区别?
python新式类和经典类的区别? 1)首先,写法不一样: class A: pass class B(object): pass 2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索. ...
- python用递归方式实现最大公约数_Python 最大公约数算法 - Python 3 基础教程
Python3 实例 以下代码用于实现最大公约数算法: 实例(Python 3.0+) # Filename : test.py # author by : www.runoob.com # 定义一个 ...
最新文章
- python怎么输入代码-python中如何设置代码自动提示
- python程序员在公司都是做什么的-程序员是做什么的?工资待遇怎么样?
- NightWatchMan
- php5.4 session配置,Session
- 一次前后端分离的实践
- 自然场景人脸检测技术实践
- java演练 循环嵌套 菱形图案的打印 四个阶段完成输出
- 数据可视化系列(三):布局格式定方圆
- Ajax-jQuery_Ajax_实例 ($.ajax、$.post、$.get)
- 命令行开启一个unity实例和执行其中的脚本方法的使用和注意
- java扫描所有用户信息_监听器实现案例----自定义session扫描器和统计在线用户人数及用户信息...
- JRuby 1.6.0发布
- 这个严重漏洞可被滥用于破坏交通信号灯系统
- 【脑筋急转弯】—— 谁是诚实人?
- 程序员面试 IT 公司,这些地方你要注意!
- 在Angularjs中使用directive自定义指令实现attribute的继承
- 推荐几个代码自动生成器,神器!!!
- win10和win7鲁大师测试软件,实测:老电脑用Win7、Win10哪个流畅?
- 操作系统Clock算法
- php 安装 bzip2,brew install php bzip2 缺少
热门文章
- 【MyBatis框架】Lombok插件的安装及使用
- c语言plc编程软件下载,罗克韦尔plc编程软件下载-2017罗克韦尔plc编程软件V21.00 官方最新版 - 极光下载站...
- 天翼校园客户端拨号服务器无响应,天翼校园客户端问题总结及解决办法
- 硬件设备监控之Sigar的配置与使用
- C语言程序设计(第三版)何钦铭著 习题6-3
- 计算机编程语言的分类
- 屏幕取色器设计思路及源码
- mysql 服务器配置信息和运行状态的查看(show variables like)
- vmlinuz的产生
- 产品必备技能(五):如何使用商业画布分析一款产品?附实操报告