【问题标题】:Johnson's algorithm negative edges - distances matrix约翰逊算法的负边缘 - 距离矩阵
【发布时间】:2018-12-01 19:19:33
【问题描述】:

生成的矩阵 = 一个矩阵,其中 mat[i][j] 是最短路径,顶点 i 为源,顶点 j 为目标。

我已经编写了自己的 Johnson 算法实现,我想知道它如何处理负边缘?最后,我获得的距离矩阵与我从运行 Floyd-Warshall 获得的距离矩阵不同。当我们重新加权图表时,这一点很明显。这是否意味着约翰逊的算法并不能帮助我们找到最短路径的成本,而只是找出哪条路径是最短的?另外,如果在结果矩阵中顶点 A 和顶点 B 之间有一条成本为 0 的路径,而在顶点 A 和顶点 C 之间有一条成本为 0 的路径,这是否意味着 B 和 C 离 A 的距离相等?

【问题讨论】:

    标签: algorithm graph shortest-path


    【解决方案1】:

    Johnson 的算法确实应该返回与使用 Floyd-Warshall 得到的相同的路径 - 如果您没有看到这一点,则可能意味着您的实现中某处存在错误。

    Johnson 的算法确实对图的边缘进行了重新加权,这是正确的,但它以一种相当聪明的方式这样做。具体来说,在新图中,虽然新图中每条路径的成本可能与原始图中不同,但新图中路径的相对成本为与原始图表中的相同。从这个意义上说,无论路径作为新图中的最短路径返回,都必然也是原始图中的最短路径。但是,新图中这些路径的 成本 不会与您的原始图匹配,因此作为约翰逊算法中的后处理步骤,您应该调整产生的成本以反转效果改变权重。

    但是,如果没有看到您正在运行的代码,就很难说出具体出了什么问题。您可能会更幸运地发布带有某些特定代码、您正在运行的特定测试用例、您获得的特定输出以及您认为它们不正确的原因的后续问题。

    【讨论】:

    • 谢谢,我意识到约翰逊算法中还有一个步骤我忘了做。
    猜你喜欢
    • 2019-06-20
    • 2021-04-01
    • 2019-02-08
    • 2017-11-15
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    相关资源
    最近更新 更多