【问题标题】:Is it possible to use Dijkstra's Shortest Path Algorithm to find the shortest Hamiltonian path? (in Polynomial Time)是否可以使用 Dijkstra 的最短路径算法来找到最短的哈密顿路径? (多项式时间)
【发布时间】:2014-06-25 00:03:24
【问题描述】:

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

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

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

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

(注意:这个问题有“hamiltonian-cycle”作为标签,即使我正在寻找一个 Hamiltonian PATH,因为我没有足够的代表来制作标签“hamiltonian-path”。但是,让我们说A和Z正好由一条边连接,那么通过找到最短哈密顿圈,然后去掉连接A和Z的边,可以找到最短哈密顿路径)

【问题讨论】:

  • 你可以用任何东西解决任何问题;只是在这种情况下你不能有polynomial time reduction
  • 在你的第一句话中:如果“P 和 NP 是否重合?”可以回答“是”,那么你的逻辑是有效的。
  • 当某些特殊条件适用于问题时,可以在多项式时间内解决许多 NP 问题。这是因为有时,NP 问题是其最通用应用领域的 NP 问题。但是当你开始提出假设时,可能会有简化。您的问题中有多个“给定”,因此您有机会。
  • 这个问题似乎是题外话,因为它是关于图论的。这是一个有趣的问题,但我认为它更适合math.stackexchange.com
  • 可能更适合Theoretical Computer Science

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 2011-02-18
      相关资源
      最近更新 更多