菜鸟学算法--NP 完全问题(转载)

目录

情景分析

旅行商问题详解

这两条路线相同还是不同?

3个城市

多个城市

近似求解

如何识别 NP 完全问题


情景分析

为解决集合覆盖问题,你必须计算每个可能的集合。

在旅行商问题中,旅行商需要前往5个不同的城市

菜鸟学算法--NP 完全问题(转载)_第1张图片

他需要找出前往这5个城市的最短路径,为此,必须计算每条可能的路径。

菜鸟学算法--NP 完全问题(转载)_第2张图片

前往5个城市时,可能的路径有多少条呢?

旅行商问题详解

我们从城市数较少的情况着手。假设只涉及两个城市,因此可供选择的路线有两条。

菜鸟学算法--NP 完全问题(转载)_第3张图片

这两条路线相同还是不同?

你可能认为这两条路线相同,难道从旧金山到马林的距离与从马林到旧金山的距离不同吗?不一定。有些城市(如旧金山)有很多单行线,因此你无法按原路返回。你可能需要离开原路行驶一两英里才能找到上高速的匝道。因此,这两条路线不一定相同

你可能心存疑惑:在旅行商问题中,必须从特定的城市出发吗?例如,假设我是旅行商。我居住在旧金山,需要前往其他4个城市,因此我将从旧金山出发。
但有时候,不确定要从哪个城市出发。假设联邦快递将包裹从芝加哥发往湾区,包裹将通过航运发送到联邦快递在湾区的50个集散点之一,再装上经过不同配送点的卡车。该通过航运发送到哪个集散点呢?在这个例子中,起点就是未知的。因此,你需要通过计算为旅行商找出起点和最佳路线。

在这两种情况下,运行时间是相同的。但出发城市未定时更容易处理,因此这里以这种情况为例。
涉及两个城市时,可能的路线有两条。

3个城市

现在假设再增加一个城市,可能的路线有多少条呢?如果从伯克利出发,就需前往另外两个城市。

菜鸟学算法--NP 完全问题(转载)_第4张图片

从每个城市出发时,都有两条不同的路线,因此总共有6条路线。因此涉及3个城市时,可能的路线有6条。

菜鸟学算法--NP 完全问题(转载)_第5张图片

多个城市

涉及6个城市时,可能的路线有多少条呢?如果你说720条,那就对了。7个城市为5040条,8个城市为40 320条。
这被称为阶乘函数(factorial function),5! = 120。假设有10个城市,可能的路线有多少条呢?10! = 3 628 800。换句话说,涉及10个城市时,需要计算的可能路线超过300万条。正如你看到的,可能的路线数增加得非常快!因此,如果涉及的城市很多,根本就无法找出
旅行商问题的正确解
旅行商问题和集合覆盖问题有一些共同之处:你需要计算所有的解,并从中选出最小/最短的那个。这两个问题都属于NP完全问题。NP完全问题的简单定义是,以难解著称的问题,如旅行商问题和集合覆盖问题。很多非常聪明的人都认为,根本不可能编写出可快速解决这些问题的算法。

近似求解

对旅行商问题来说,什么样的近似算法不错呢?能找到较短路径的算法就算不错。在继续往下阅读前,看看你能设计出这样的算法吗?
我会采取这样的做法:随便选择出发城市,然后每次选择要去的下一个城市时,都选择还没去的最近的城市。假设旅行商从马林出发。总旅程为71英里。这条路径可能不是最短的,但也相当短了。

菜鸟学算法--NP 完全问题(转载)_第6张图片

如何识别 NP 完全问题

Jonah正为其虚构的橄榄球队挑选队员。他列了一个清单,指出了对球队的要求:优秀的四分卫,优秀的跑卫,擅长雨中作战,以及能承受压力等。他有一个候选球员名单,其中每个球员都满足某些要求。

菜鸟学算法--NP 完全问题(转载)_第7张图片

菜鸟学算法--NP 完全问题(转载)_第8张图片

Jonah需要组建一个满足所有这些要求的球队,可名额有限。等等,Jonah突然间意识到,这不就是一个集合覆盖问题吗!

菜鸟学算法--NP 完全问题(转载)_第9张图片

Jonah可使用前面介绍的近似算法来组建球队。
(1) 找出符合最多要求的球员。
(2) 不断重复这个过程,直到球队满足要求(或球队名额已满)。

NP完全问题无处不在!如果能够判断出要解决的问题属于NP完全问题就好了,这样就不用去寻找完美的解决方案,而是使用近似算法即可。但要判断问题是不是NP完全问题很难,易于解决的问题和NP完全问题的差别通常很小

但如果要找出经由指定几个点的的最短路径,就是旅行商问题——NP完全问题。简言之,没办法判断问题是不是NP完全问题,但还是有一些蛛丝马迹可循的

  • 元素较少时算法的运行速度非常快,但随着元素数量的增加,速度会变得非常慢。
  • 涉及“所有组合”的问题通常是NP完全问题。
  • 不能将问题分成小问题,必须考虑各种可能的情况。这可能是NP完全问题。
  • 如果问题涉及序列(如旅行商问题中的城市序列)且难以解决,它可能就是NP完全问题。
  • 如果问题涉及集合(如广播台集合)且难以解决,它可能就是NP完全问题。
  • 如果问题可转换为集合覆盖问题或旅行商问题,那它肯定是NP完全问题

你可能感兴趣的:(算法学习)