grokking algorithms Greedy algorithms--第八章 贪婪算法中文翻译

本文介绍了贪婪算法的概念和应用,通过教室安排和背包问题展示了贪婪算法的简单性和实用性。在教室安排问题中,通过选择结束时间最早的课程进行安排,找到全局最优解。而在背包问题中,贪婪算法未能给出最优解,但在某些情况下,近似解已经足够好。文章还探讨了贪婪算法在处理NP完备问题中的角色,以及如何在实际问题中运用贪婪算法找到合理解。
摘要由CSDN通过智能技术生成

贪婪算法
··············································································
在本章中:
你会学到如何处理不确定问题;
没有快速解决方案的问题称为NP完备;
当你看到这类问题时,可以快速地区分它们,从而不会浪费时间在为它们寻找快速算法上
你会用到近似算法来为NP完备问题找到近似解;
你会学到贪婪算法—它时一个非常简单实用的问题解决方案
··············································································
教室安排问题
假设你有一间教室,你希望尽可能地安排很多的课程在这间教室,你有一个课程时间表。

这里写图片描述

你不可以将它们都安排到这间教室,因为有些课程的上课时间是冲突的。
这里写图片描述

这里写图片描述
你希望将课程尽可能多的安排在这间教室,你需要怎么安排各个课程,从而使这间教室可以承接尽可能多的课程呢?
听起来是个难题,对吧?其实,这个算法很简单,简单到不可思议!这就是算法:
1.找到结束时间最早的课程,安排它为这间教室的第一个课程。
2.找到在第一堂课结束后最早开始的课程,然后,若是有多个课程的开始时间是一样的,选择最早结束的那个,安排它为第二个课程。
按照此种方法一直进行,你会得到答案。让我们来试一下。艺术课程的结束时间最早,10:00结束,因此它是安排在这间教室的第一个课程。

这里写图片描述

现在来找10:00后最早开始而且结束时间最早的课程。

这里写图片描述
英语肯定不在此列,因为它的上课时间和艺术的上课时间是冲突的到那时数学课是可以的。因此数学课是安排在这间教室的第二堂课。

这里写图片描述

最后,CS课和数学课是冲突的,因此CS课出局,但是音乐课的上课时间是合适的。
因此,这间教室的课程安排如下:

这里写图片描述

好多人都是说这个算法太简单了,因此是错误的。但这正是贪婪算法的魅力所在:它们非常简单!贪婪算法真的非常简单:在每一步,找到最优方案!在这个例子中,找结束时间最早的课程。用术语来表达:在每一步都找到局部最优解,在最后你就会得到全局最优解。相信我,贪婪算法找到了这种安排问题的最优解。
非常明显,贪婪算法并不是每次都起作用,但是它非常简单,我们来看另一个例子。

背包问题
假设你是一个贪心的小偷,你拿着背包去偷东西,商店里的所有东西你都可以偷,但是你只能装满这个背包,这个背包最多只能装35英镑。
这里写图片描述
你希望尽可能地偷值钱的东西,你可以利用什么算法来达到目的呢?
同样地,我们来试下贪婪算法。它最简单:
1.选择最贵的物品,将它们放入背包。
2.选择剩下的物品中最贵的,然后一直这么做。
但是这次,它不起作用了。你看,假设有3种物品你可以偷。
这里写图片描述

你的背包只能装35英镑的物品,立体音箱系统是最贵的,你偷这个,但是你的背包就不能偷其他的东西了。
这里写图片描述

你只偷了3000美元的东西。但是,若是你偷笔记本电脑和吉他,你就可以偷价值3500美元的东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值