我有一个问题,在我过去的学校考试中被问到了,但找不到答案。
在图形上运行Johnson Algorithm之后,是否可以知道最终矩阵,从而知道它先前是否具有负循环?为什么?
Johnson算法是一种能够计算图上最短路径的技术。只要不存在负权重的循环,它就可以处理边缘的负权重。
该算法包括(来自Wikipedia):
q
添加到图中,并通过零权重边将其连接到其他每个节点。q
开始,使用 Bellman–Ford 算法,为每个顶点v
查找最小权重h(v)
从q
到v
的路径。如果此步骤检测到负周期,则算法终止。
u
到v
的边缘,长度为{{1 }},并赋予新的长度w(u, v)
。w(u,v) + h(u) − h(v)
被删除,并且使用 Dijkstra的算法来查找从每个节点q
到重加权图中每个其他顶点的最短路径。答案 0 :(得分:0)
如果我正确理解了您的问题,应该是这样的:
在图上运行Johnson算法后,是否可能知道最终的成对距离矩阵,以了解其最初是否具有负权重边缘?为什么?
正如其他人在此处评论的那样,我们必须首先假定图形没有负权重循环,因为否则Johnson Johnson算法将停止并返回False(由于对负权重循环进行了内部Bellman-Form检测)。
然后的答案是,如果图形中存在负负边e =(u,v),则u之间的最短加权距离-> v不能> 0(因为在最坏的情况下,您可以这些顶点之间的负边e)。
因此,如果最终成对距离中的任何值<0,则至少有一条边在原始图中具有负权重
答案 1 :(得分:0)
如果该问题应解释为:
在图上运行Johnson算法后,是否有可能知道更新的非负边缘权重,从而知道它最初是否具有任何负权重边缘或不?为什么?
那不,你不知道。
在仅具有非负边缘权重的图形上运行Johnson算法将使权重保持不变。这是因为所有最短距离q -> v
都将为0。因此,考虑到运行Johnson之后的边缘权重,初始权重可能完全相同。