算法——贪婪算法
Posted zhangshengchao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法——贪婪算法相关的知识,希望对你有一定的参考价值。
目的:
①学习如何处理不可能完成的任务:没有快速算法的问题(NP完全问题)
②学习识别NP完全问题,以免浪费时间去寻找解决它们的快速算法
③学习近似算法,使用它们可快速找到NP完全问题的近似解
④学习贪婪策略——一种非常简单的问题解决策略
希望在这间教室上尽可能多的课 如何选出尽可能多且时间不冲突的课程呢?
①选出结束最早的课,它就是要在这间教室上的第一堂课 ②接下来,必须选择第一堂课结束后才开始的课,同样选择结束
贪婪算法:
每步都选择局部最优解,最后得到的就是全局最优解。 贪婪算法并非在任何情况行之有效,但它易于实现。
有时候并不能完美的解决一个问题。但你可以拥有大致解决问题的方法。
假如你办了一个广播节目,要让全美50个州听众都收听的到,所以你需要决定在哪个广播台播出,每个广播台播出都要费用,所以尽可能在少的广播台播出。
每个广播台都覆盖特定区域,可能重叠。如何找出覆盖全美的最小广播台集合呢?很难。
①列出每个可能的广播台集合,可能的子集有2^n个,幂级
②在这些集合中,找出最小集合 问题是:要找出每个可能的子集要很长时间,可能的子集有2^n个,运行时间为O(2^n),如果广播台没几个那还可行,但很多广播台的话,时间将激增。
近似算法就可以很好的解决这个问题。
①选出这样一个覆盖了最多的未覆盖州,即便这个广播台覆盖了一些已经覆盖了的州也没关系 ②重复第一步,直到覆盖了所有州
这是一种近似算法。在获得精确解需要的时间太长时,可使用近似算法
一个好的近似算法:速度够快,最接近最优解即可。
!这里也了解到了我以前没有注意过的语法 &可以用来表示交集,之后又百度了一下,知道了 | 表示并集,A-B表示差集
其实之前提到的广度优先搜索和狄克斯特拉算法都是贪婪算法
以上是关于算法——贪婪算法的主要内容,如果未能解决你的问题,请参考以下文章