我有一个带权无向图 G,其中有 n 个顶点。其中两个顶点是 X 和 Y。
我需要找到从 X 开始、以 Y 结束并经过 G 中所有顶点(以任意顺序)的最短路径。
我该怎么做呢?
这不是旅行商问题:我不需要只访问每个顶点一次,也不想回到第一个顶点。
我需要找到从 X 开始、以 Y 结束并经过 G 中所有顶点(以任意顺序)的最短路径。
我该怎么做呢?
这不是旅行商问题:我不需要只访问每个顶点一次,也不想回到第一个顶点。
这个问题基本上是NP难问题,我将提供一个证明的草图(而不是正式的归约),它解释了除非P = NP,否则没有多项式解决方案。
假设反证法,假设某个算法A(G,x,y)
可以通过多项式时间O(P(n))
解决这个问题。
定义以下算法:
HamiltonianPath(G):
for each pair (x,y):
if A(G(x,y) == |V| - 1):
return true
return false
该算法解决哈密顿路径问题。
-> 如果存在一条通过所有节点且长度恰好为
|V|
的路径,它没有重复使用任何顶点,并且找到的路径是哈密顿路径。<- 如果存在哈密顿路径v1->v2->...->vn,则调用
A(G,v1,vn)
时,您将找到最短可能的路径,其长度最多为|V|-1
(因为它需要经过所有顶点),并且算法将返回true。
复杂度:
该算法的复杂度为O(n^2 * P(n))
,即多项式时间。
因此,假设存在这样的算法,哈密顿路径问题可以在多项式时间内解决,而且由于它(哈密顿路径问题)是NP-Complete,P=NP。
X,Y
(有多项式数量的节点对)就很容易找到一个图是否具有哈密顿回路。 - amit