贪婪算法回顾

回顾

还记的贪婪算法么? 若是你不记得了, 看了下面这个例子你必定会想起来, 由于这个例子太广泛了, 几乎每一个将贪婪算法的地方, 第一个例子都是它, 言归正传. 算法

问题: 如今有以下课程表, 要将这些课尽量多的安排在教室A内. spa

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

首先将全部课程都安排在教师A是不现实的, 由于时间上存在冲突. 那改怎么安排呢?数学

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

具体思路table

  1. 选出结束时间最先的课程, 将它加到教室A的第一节课class

  2. 找出在当前教室A最后一节课的结束时间以后开始, 而且结束时间最先的课程, 将其加到教室A的课表中方法

  3. 重复步骤2总结

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

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

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

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

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

显然,贪婪算法并不老是可以找到最优解

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

问题: 如今有一个小偷, 带着一个能够装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, 其它条件不变呢?

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

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

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

总结

贪婪算法是否是感受优势动态规划的意思? 没错, 贪婪算法能够说是动态规划的一种特例,也就是说, 全部使用贪婪算法可以解决的问题均可以经过动态规划来解决, 可是反过来并不成立.

其实, 贪婪算法我的感受并不能叫作贪婪算法, 应该叫贪婪思想, 嘿嘿. 由于它并非一个具体的算法, 而是一种解决问题的思路:

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

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

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

相关文章
相关标签/搜索