运行Johnson算法后回溯

时间:2018-09-04 01:19:08

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

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

  

在图形上运行Johnson Algorithm之后,是否可以知道最终矩阵,从而知道它先前是否具有负循环?为什么?


Johnson算法

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

该算法包括(来自Wikipedia):

  • 首先,将新节点q添加到图中,并通过零权重边将其连接到其他每个节点。
  • 第二,从新顶点q开始,使用 Bellman–Ford 算法,为每个顶点v查找最小权重h(v)qv的路径。如果此步骤检测到负周期,则算法终止。
  • 接下来,使用 Bellman–Ford 算法计算的值对原始图的边缘进行加权:从uv的边缘,长度为{{1 }},并赋予新的长度w(u, v)
  • 最后,w(u,v) + h(u) − h(v)被删除,并且使用 Dijkstra的算法来查找从每个节点q到重加权图中每个其他顶点的最短路径。

enter image description here

2 个答案:

答案 0 :(得分:0)

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

  

在图上运行Johnson算法后,是否可能知道最终的成对距离矩阵,以了解其最初是否具有负权重边缘?为什么?

正如其他人在此处评论的那样,我们必须首先假定图形没有负权重循环,因为否则Johnson Johnson算法将停止并返回False(由于对负权重循环进行了内部Bellman-Form检测)。

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

enter image description here

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

答案 1 :(得分:0)

如果该问题应解释为:

  

在图上运行Johnson算法后,是否有可能知道更新的非负边缘权重,从而知道它最初是否具有任何负权重边缘或不?为什么?

那不,你不知道。

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