【问题标题】:When do Dijkstra and the Bellman-Ford algorithm both fail to find a shortest path?Dijkstra 和 Bellman-Ford 算法什么时候都找不到最短路径?
【发布时间】:2014-05-24 07:44:33
【问题描述】:

我知道当有负边权重时 Dijkstra 会失败,但是两种算法什么时候都失败了?

【问题讨论】:

  • 什么时候找不到路径?
  • 当有负边权重时,Dijkstra 并不总是失败,只是并不总是成功。

标签: algorithm shortest-path


【解决方案1】:

如果图包含负循环并且该循环可以从源节点到达并且目标节点可以从循环到达,则两种算法都不会找到最短路径。在这种情况下,没有最短路径 - 您可以在循环中执行无限多次迭代,始终减少路径长度。

【讨论】:

    【解决方案2】:

    如果存在负循环(从源​​头可达),Bellman-Ford 可以认为是失败的。负循环的主要问题是您可以继续遍历它,从而降低路径成本,因此不存在到某些顶点的有限最短路径(因此 Bellman-Ford 是否真的失败是有争议的 - 它可以检测到这些循环)。

    Dijkstra 的算法也会有类似的负循环问题(更不用说处理负边权重的更一般的问题)。

    另一种情况可能是顶点不可达,但同样你可以检测到它们不可达。

    【讨论】:

    • 哈,我们的想法是一样的,但我用 10 秒击败了你;)顺便说一句,如果正确实施,如果目的地不可到达,这两种算法都会成功报告,所以这不应该是错误
    【解决方案3】:

    由于如果存在负循环,则不存在最短路径,并且 Bellman-Ford 可以检测到负循环,因此您可以说它永远不会失败。 (同样因为你可以检测到两个顶点之间没有路径)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-23
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多