算法——贪婪算法

目的:

①学习如何处理不可能完成的任务:没有快速算法的问题(NP完全问题)

②学习识别NP完全问题,以免浪费时间去寻找解决它们的快速算法

③学习近似算法,使用它们可快速找到NP完全问题的近似解

④学习贪婪策略——一种非常简单的问题解决策略

算法——贪婪算法_第1张图片

 

 

希望在这间教室上尽可能多的课 如何选出尽可能多且时间不冲突的课程呢?

①选出结束最早的课,它就是要在这间教室上的第一堂课 ②接下来,必须选择第一堂课结束后才开始的课,同样选择结束

贪婪算法:

每步都选择局部最优解,最后得到的就是全局最优解。 贪婪算法并非在任何情况行之有效,但它易于实现。

 

有时候并不能完美的解决一个问题。但你可以拥有大致解决问题的方法。

 

假如你办了一个广播节目,要让全美50个州听众都收听的到,所以你需要决定在哪个广播台播出,每个广播台播出都要费用,所以尽可能在少的广播台播出。

每个广播台都覆盖特定区域,可能重叠。如何找出覆盖全美的最小广播台集合呢?很难。

①列出每个可能的广播台集合,可能的子集有2^n个,幂级

②在这些集合中,找出最小集合 问题是:要找出每个可能的子集要很长时间,可能的子集有2^n个,运行时间为O(2^n),如果广播台没几个那还可行,但很多广播台的话,时间将激增。

 

近似算法就可以很好的解决这个问题。

①选出这样一个覆盖了最多的未覆盖州,即便这个广播台覆盖了一些已经覆盖了的州也没关系 ②重复第一步,直到覆盖了所有州

这是一种近似算法。在获得精确解需要的时间太长时,可使用近似算法

 

一个好的近似算法:速度够快,最接近最优解即可。

 

算法——贪婪算法_第2张图片

 

 !这里也了解到了我以前没有注意过的语法   &可以用来表示交集,之后又百度了一下,知道了  |  表示并集,A-B表示差集

 

其实之前提到的广度优先搜索和狄克斯特拉算法都是贪婪算法

你可能感兴趣的:(算法——贪婪算法)