是否可以使用Dijkstra的最短路径算法来找到最短的哈密顿路径? (在多项式时间内)

时间:2014-06-25 00:03:24

标签: algorithm graph-theory dijkstra np-complete hamiltonian-cycle

我已经读过,查找图中是否存在Hamiltonian path的问题是NP-Complete,并且由于Dijkstra's Shortest Path Algorithm在多项式时间中运行,因此无法修改它以找到最短的哈密顿路径。 (这个逻辑有效吗?)

但是,如果在无向图上给出两个节点(比如A和Z)(所有边都有非负成本),并且给出了给定节点至少有一条哈密顿路径(A)和Z)作为终点。鉴于这些规范,现在是否可以修改Dijkstra算法以找到A和Z为端点的最短哈密顿路径? (在多项式时间内)

注意:我只关心从两个节点中找到最短的哈密顿路径。例如,如果有一个包含26个节点的图形(标记为A到Z),那么通过所有点但从A开始到Z结束的最短路径是什么。(我不关心找到其他不同的Hamilton路径端点,只有A和Z)

附加问题:如果答案是“否”但是还有另一种算法可以用来解决这个问题,那么它是什么算法,它的时间复杂度是多少?

(注意:这个问题有“哈密尔顿循环”作为标签,即使我正在寻找汉密尔顿主义路径,因为我没有足够的代表来制作标签“hamiltonian-path”。但是,让我们说A和Z恰好连接一条边,然后通过找到最短的哈密顿循环然后去除连接A和Z的边来找到最短的哈密顿路径。

2 个答案:

答案 0 :(得分:1)

  

但是,如果在无向上给出两个节点(比如A和Z),该怎么办?   图(所有边都有非负成本),并给出了它   给定节点(A和Z)至少有一条哈密顿路径   作为终点。鉴于这些规范,现在是否可能   修改Dijkstra算法以找到最短的哈密顿路径   A和Z作为端点? (在多项式时间内)

您如何建议修改它?这仅在A和Z之间存在单个路径且它访问图表上的所有其他点时才有效。否则,Dijkstra将终止一些只访问某些节点子集的较短路径。如果在A和Z之间存在哈密顿路径,则可以解决最长路径问题,但这也是NP难度。

答案 1 :(得分:1)

不,这是不可能的。你的简化问题仍然是NP难的。旅行推销员的减少:

根据图表(V, E),找到一次访问每个v in V的最短路径。取一个任意顶点v in V。将v拆分为两个顶点v_sourcev_sink。使用您的算法查找从Pv_source的最短哈密顿路径v_sinkPv开始和结束的最短周期,访问每个v in V。由于P是一个循环,因此“起始”顶点是无关紧要的。因此,P也是旅行商问题的解决方案。

减少显然是多项式时间(实际上是常数),所以你的问题是NP难的。