algorithm - 约翰逊算法负边距矩阵

标签 algorithm graph shortest-path

结果矩阵 = mat[i][j] 是以顶点 i 为源点和顶点 j 为目的地的最短路径的矩阵。

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

最佳答案

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

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

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

关于algorithm - 约翰逊算法负边距矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53574264/

相关文章:

algorithm - 是不是: all edge weights are positive,那么任何连接所有顶点并且具有最小总重量的必须是最小生成树?

algorithm - 量子算法可以用于加密吗?

algorithm - n 个顶点的图,其直径为 3,补集的直径也为 3?

algorithm - 多重图和最便宜的路径

algorithm - 简单算法分析

python - 使用从评估函数返回的值从极大极小寻找合适的移动

algorithm - 图问题的函数/流编程 "Reconstruct Itinerary"

节点之间的neo4j最短路径

c - 我正在尝试为一个类实现 dijkstra 算法

algorithm - 通过 DP 最大化给定股票数据的利润