Algorithm 运行约翰逊算法后的回溯

Algorithm 运行约翰逊算法后的回溯,algorithm,graph-algorithm,shortest-path,dijkstra,bellman-ford,Algorithm,Graph Algorithm,Shortest Path,Dijkstra,Bellman Ford,我有一个问题,我在学校过去的几次考试中被问到,我找不到答案 在图形上运行后,是否可能知道最终矩阵,从而知道它以前是否有负循环?为什么? 约翰逊算法 约翰逊算法是一种能够计算图上最短路径的技术。它能够处理边上的负权重,只要不存在具有负权重的循环 该算法包括(来自): 首先,将一个新节点q添加到图中,通过零权重边连接到每个其他节点 其次,使用贝尔曼-福特算法,从新顶点q开始,为每个顶点v找到从q到v的路径的最小权重h(v)。如果此步骤检测到负循环,则终止算法 接下来,使用Bellman–Ford

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

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


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

该算法包括(来自):

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

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

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

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

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


因此,如果问题被解释为:

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

那么不,你说不出来


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

您能再详细说明一下您的问题吗?也许可以举个例子。这样,你的问题就可以接触到更多的人,更容易理解,更独立,并帮助更多的人找到你的问题。你的意思是说“如果它以前有消极的一面”而不是“如果它以前有消极的循环”?因为如果有负循环,约翰逊的算法就会中止。是的,我的坏边,负边。我不知道如何详细阐述,因为这就是我发现问题的原因,我也很困惑。“了解最终矩阵”-你的意思是了解距离矩阵?你同意@ShaharA的建议还是“最终矩阵”指的是更新的非负边权重?如果是后者,那么就不知道了,因为在一个非负权重的图上运行Johnson会使它们保持不变。