【问题标题】:Backtrack after running Johnson algorithm运行约翰逊算法后回溯
【发布时间】:2019-02-08 23:24:55
【问题描述】:

我在学校过去的一些考试中被问到了一个问题,但我找不到答案。

在图表上运行Johnson Algorithm 后是否有可能知道最终矩阵,以知道它以前是否有负循环?为什么?


约翰逊算法

约翰逊算法是一种能够计算图上最短路径的技术。只要不存在负权重的循环,它就能够处理边上的负权重。

算法包括(来自Wikipedia):

  • 首先,将一个新节点 q 添加到图中,通过零权重边连接到其他每个节点。
  • 其次,使用Bellman–Ford算法,从新的顶点q开始,为每个顶点v找到从q的路径的最小权重h(v)v。如果这一步检测到负循环,则算法终止。
  • 接下来,使用 Bellman–Ford 算法计算的值重新加权原始图的边:从 uv 的边,长度为 w(u, v),被赋予新长度w(u,v) + h(u) − h(v)
  • 最后,q 被移除,Dijkstra 的 算法用于找到从每个节点s 到重新加权图中每个其他顶点的最短路径。

【问题讨论】:

  • 您能否详细说明您的问题?也许举个例子。这样一来,您的问题就会吸引更多的人,更容易理解、自成一体,并帮助更多人找到您的问题。
  • 您的意思是说“如果它以前有负”而不是“如果它以前有负循环”吗?因为如果存在负循环,约翰逊的算法就会中止。
  • 是的,我的缺点是负面的。我不知道如何详细说明,因为这是我发现问题的方式,我也很困惑。
  • “知道最终矩阵” - 你的意思是知道距离矩阵?
  • 您同意@ShaharA 的建议还是“最终矩阵”指的是更新后的非负边权重?如果是后者,那么您无法判断,因为在具有非负权重的图上运行 Johnson 会使它们保持不变。

标签: algorithm graph-algorithm shortest-path dijkstra bellman-ford


【解决方案1】:

如果我正确理解了您的问题,应该如下:

在图上运行约翰逊算法后,是否有可能知道最终的成对距离矩阵,以知道它最初是否有任何负权边?为什么?

正如其他人在这里评论的那样,我们必须首先假设该图没有负权重循环,否则 Johnson 算法会停止并返回 False(由于内部 Bellman-Form 检测负权重循环)。

那么答案是,如果图中存在任何负权边 e = (u, v),那么 u --> v 之间的最短加权距离不能 > 0(因为在最坏的情况下,您可以通过这些顶点之间的负边 e)。

因此,如果最终成对距离中的任何值 ,则至少有一条边在原始图中具有负权重

【讨论】:

    【解决方案2】:

    如果问题应该被解释为:

    在图上运行约翰逊算法后知道更新的非负边权重是否有可能知道它最初是否有任何负权边或不是?为什么?

    那么不,你不能说。

    在只有非负边权重的图上运行 Johnson 算法将使权重保持不变。这是因为所有最短距离q -> v 都将为 0。因此,在运行 Johnson 后给定边缘权重,初始权重可能完全相同。

    【讨论】:

      猜你喜欢
      • 2019-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多