- 贪婪算法很简单:每步都采取最优的做法。【贪婪算法每步都寻找局部最优解,企图以这种方式获得全局最优解。】
- 贪婪算法并非在任何情况下都行之有效,但它易于实现!
- 对于NP完全问题,还没有找到快速解决方案。面临NP完全问题时,在获得精确解需要的时间太长时,可使用近似算法(approximation algorithm)。
- 判断近似算法优劣的标准如下:速度有多快;得到的近似解与最优解的接近程度。
- 贪婪算法易于实现、运行速度快,是不错的近似算法。
- 贪婪算法的运行时间为O(n^2),精确算法的为O(2^n)其中n为节点数量。
- 集合类似于列表,只是不能包含重复的元素;集合运算:并集 |、交集& 和 差集 - 。
没办法判断问题是不是NP完全问题,但有可以参考的依据:
- 在图中如果要找出经由指定几个点的最短路径,就是旅行商问题——NP完全问题。否则就是普通的最短路径问题。
- 元素较少时算法的运行速度非常快,但随着元素数量的增加,速度会变得非常慢。
- 涉及“所有组合”的问题通常是NP完全问题。
- 不能将问题分成小问题,必须考虑各种可能的情况。这可能是NP完全问题。
- 如果问题涉及序列(如旅行商问题中的城市序列)且难以解决,它可能就是NP完全问题。
- 如果问题涉及集合(如广播台集合)且难以解决,它可能就是NP完全问题。
- 如果问题可转换为集合覆盖问题或旅行商问题,那它肯定是NP完全问题。
练习:
1.下面各种算法是否是贪婪算法: 快速排序。 广度优先搜索。 狄克斯特拉算法。
2 .有个邮递员负责给20个家庭送信,需要找出经过这20个家庭的最短路径。请问这是一个NP完全问题吗?
3.一堆人中找出最大的朋友圈(即其中任何两个人都相识)是NP完全问题吗?
4.你要制作美国地图,需要用不同的颜色标出相邻的州。为此,你需要确定最少需要使用多少种颜色,才能确保任何两个相邻州的颜色都不同。请问这是NP完全问题吗?
答案:
1 ,不是;是;是。 2. 是; 3 是,4是