贪婪算法回顾

回顾

还记的贪婪算法么? 如果你不记得了, 看了下面这个例子你一定会想起来, 因为这个例子太普遍了, 几乎每个将贪婪算法的地方, 第一个例子都是它, 言归正传.

问题: 现在有如下课程表, 要将这些课尽可能多的安排在教室A内.

课程名 开始时间 结束时间
语文课 9:00 10:00
数学课 9:30 10:30
音乐课 10:00 11:00
政治课 10:30 11:30
美术课 11:00 12:00

首先将所有课程都安排在教师A是不现实的, 因为时间上存在冲突. 那改怎么安排呢?

这个问题很难, 对吧. 算了, 至少我第一次看的时候, 完全没有头绪. 但看了下面的思路, 你又会发现, 啊?这么简单么?

具体思路

  1. 选出结束时间最早的课程, 将它加到教室A的第一节课
  2. 找出在当前教室A最后一节课的结束时间之后开始, 并且结束时间最早的课程, 将其加到教室A的课表中
  3. 重复步骤2

经过上面的步骤, 得出的课表为:

课程名 开始时间 结束时间
语文课 9:00 10:00
音乐课 10:00 11:00
美术课 11:00 12:00

如何, 是不是感觉这个算法太简单了, 简单到我都不敢相信最终的结果是正确的.

但是这正是贪婪算法的优点, 简单, 容易实施.

贪婪算法的思想就是(个人理解), 每一步都找到当前状态的最优解, 继续.

显然,贪婪算法并不总是能够找到最优解

来了, 又来了, 又是一个被用烂了的例子, 但我就是要用, 哼.

问题: 现在有一个小偷, 带着一个可以装35kg重东西的包包, 他要将最贵重的东西带走, 那么, 贪婪算法思路如下:

  1. 将可装下的最贵的东西装入背包
  2. 重复步骤1

但是, 如果物品如下:

  1. 物品A: 价值300, 重量30kg
  2. 物品B: 价值200, 重量20kg
  3. 物品C: 价值150, 重量15kg

按照上面的思路, 装入的内容为: 物品A, 总价值300

但是, 很显然, 如果装入的是: 物品B+物品C, 总价值350

这时, 贪婪算法找出的就不是最优解了.

如果换一种思路呢?

  1. 将可装下的最轻的东西装入背包
  2. 重复步骤2

你很惊喜的发现, 结果就是我们要的, 但是, 不好意思, 这只是这种情况下的满足.

如果换一种情况呢? 如果物品A价值是500, 其它条件不变呢?

很显然, 在这里, 物品有价值和重量两个值需要考量, 并不能够单单拿出一个来进行判断(之前的教室问题只需要考虑时间), 需要综合考虑.

其实我个人觉得, 这个例子举得并不恰当, 这种问题本就不适合使用贪婪算法来进行求解. 但是到处都用这个例子, 那我就用吧, 因为我也想不出更好的例子了.......

最终的结果虽然不是最优解, 但是也比较接近了. 主要是算法简单啊

总结

贪婪算法是不是感觉优点动态规划的意思? 没错, 贪婪算法可以说是动态规划的一种特例,也就是说, 所有使用贪婪算法能够解决的问题都可以通过动态规划来解决, 但是反过来并不成立.

其实, 贪婪算法个人感觉并不能叫做贪婪算法, 应该叫贪婪思想, 嘿嘿. 因为它并不是一个具体的算法, 而是一种解决问题的思路:

每一步都寻找当前状态的最有解(局部最优解), 最终得到的就是由所有局部最优解组成的全局最优解, 或接近全局最优解的解

有点只顾眼前利益, 不看长远利益的感觉哈. 这种思路听起来, 简单、容易实现, 甚至简单到让人怀疑他的正确性, 你的怀疑是对的, 并不是每次局部最优解的组合就是全局最优解, 但他的优点就是简单啊, 而且对于上面第一个例子中这样的方法就很好的解决了.

最后, 贪婪算法, 重点在于一个贪字, 哈哈, 请记住贪婪算法的精髓就是

 

原文地址:https://www.cnblogs.com/hujingnb/p/10947152.html

时间: 2024-11-05 21:52:16

贪婪算法回顾的相关文章

Spring知识点回顾(01)

Spring知识点回顾(01) 一.依赖注入 1.声明Bean的注解 @Component @Service @Repository @Controller 2.注入Bean的注解 @Autowired @Inject @Resource 二.加载Bean 1.xml方式 - applicationcontext.xml : Beans, Bean, Component-Scan 2.注解方式 - @Configuration,@ComponentScan,@Bean 用@Configurati

Atitit.播放系统规划新版本 v4 q18 and 最近版本回顾

Atitit.播放系统规划新版本 v4  q18  and 最近版本回顾 1 版本12 (ing)4 1.1 无映射nas系统..4 1.2 图片简介搜刮其4 1.3 12.8. 电影图片增加png,bmp等格式支持,目前只有jpg方式95 1.4 12.9. 电影简介增加utf8编码支持,目前只有gbk编码方式95 1.5 12.10. 路径item俩端过滤空格,增强对路径 的容错处理95 1.6 不同分店的分类配置分离5 1.7 问题自动反馈支持5 1.8 规划h5本地缓存系列 5 1.9 

程序员之路--回顾2015,展望2016

一.前言 回顾2015年,有太多的事情,从暑假末的来北京找工作,到家里兄弟的结婚,再到自己喜欢的人也来到北京找工作,,,有太多的需要来回忆,来记录.今天就在此刻(2016年1月3日下午10:17)来简单的对2015年的自己进行总结,然后规划一下2016年的奋斗目标. 二.先谈谈工作 从暑假结束快要结束的时候,看看原来写的随笔,也就是2015年8月22日,和同学一起踏上开往北京的火车.用了一个月的时间找到了一份自己还觉得不错的工作.找工作那一个月里面每天吃饭.看书.面试.睡觉.这里想对将要找工作的

linux习题回顾

linux习题回顾 1.1 创建一个压缩包/etc,我想让压缩包上面有个日期/时间. [[email protected] ~]# tar zcf /tmp/etc-$(date+%F).tar.gz /etc [[email protected] ~]# ls -l /tmp -rw-r--r--. 1 root root 9731838 Aug  3 19:15 etc-2017-08-03.tar.gz 1.2 已知/oldboy/test.txt文件内容为: oldboy xizi xi

面向对象【day07】:多态-面向对象使用场景--知识点回顾

本节内容 多态 面向对象使用场景 知识点回顾 一.多态 一.概述 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作.简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针. 那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了--代码重用.而多态则是为了实现另一个目的--接口重用!多态的作用,就是为了

react回顾

读书就像盖房子,根基要正,刚开始要选一些文风简明的...react 小书 就不错. 创建组件(extends 或是 stateless) 父子组件之间的通信(super) 事件监听(event对象和this) 渲染列表(map) 状态提升(state) 挂载阶段声明周期 更新阶段生命周期(setState) 容器类组件(this.props.children) Proptypys验证 defaultProps 高阶组件(返回新的组件类) getChildContext(childContextT

我的2017OKR - 年中回顾

自从订阅了吴军老师的<硅谷来信>之后,对其中一篇介绍Google的目标管理方法OKR的文章记忆犹新.想到自己喜欢在每年年初的时候给自己定制一些规划,于是乎了解了一下OKR并重构了一下我的2017年计划,并借此机会进行一个年中(不是终)回顾,希望能有越来越多人使用OKR给自己设定目标规划(目前自己正在向自己创建的有书共读微信群里的书友推荐使用),并努力去完成计划,当一年结束时看看自己完成的情况,会有不自觉地自豪感(前提是你得尽力去完成60%以上的情况下). 一.也谈OKR是个什么鬼 1.1 什么

2017ACM省赛总结与生涯回顾

省赛本身的内容没有太多可说的,和去年一样和swt和ly这对情侣一队. 先说比赛相关的内容.热身赛A题不会,B题和C题都是水题,但是没有找出C的坑点,所以热身赛只做出了一题,赛后我也没有去解决,这次我纯怀打酱油的心理,没有怎么复习过.晚饭碰到聪神,安慰我说是给明天攒人品.晚上也按时睡觉了.正赛早上闹钟起来,挺困的,洗了头出门了.总之一切也比较平常.先看了三道比较水的题,我感觉我看的F比较水,先上去敲了,过一会裁判发来提示关于G的mod印刷问题,我以为只是一般的解释,没有在意直接关了,其实是他们正在

订餐App回顾与总结

MY-HR 成员: 角色分配 学号 博客园 丘惠敏 PM项目经理 201406114203 http://www.cnblogs.com/qiuhuimin/ 郭明茵 用户 201406114204 http://www.cnblogs.com/mingyin/ 李浩然 产品负责人 201406114227 http://www.cnblogs.com/range/ 刘皓 Scrum Master 201406114229 http://www.cnblogs.com/shuaibi/ 三次贡献