为什么Floyd-Warshall以一种奇怪的方式记住这条路?

时间:2013-11-08 06:52:22

标签: algorithm graph floyd-warshall

我刚开始学习图形算法,更具体地说 - Floyd-Warshall算法。在wikipedia处查看修改后的算法以允许路径重建,我注意到它保留了中间节点,而不是更合乎逻辑的(在我看来)保存下一跳。此外,在课程书中,方法由一个到最后一个节点保存。为什么要用这种方式保存路径?

1 个答案:

答案 0 :(得分:0)

没有人“下一跳”。对于节点i和j的任何组合,问题是以紧凑的方式存储足够的信息以重建从i到j的最短路径。假设从i到j1的最短路径中的最后一条边是(k,j1),从i到j2的最短路径中的最后一条边是(k,j2)。你会将什么存储为节点k的“下一跳”?

另一方面,假设k是从i到j1和从i到j2的路径上的最高索引顶点。在给定算法存储的信息的情况下,可以递归地重构两条最短路径。一个是从i到k的最短路径,接着是从k到j1的最短路径。另一个是从i到k的最短路径,接着是从k到j2的最短路径。对于每个i,j组合,在路径上存储一个节点足以重建任何最短路径。