例如:Bellman-Ford-Wiki-page及其proof of correctness算法的基本实现版本,当使用所有边缘的平行放松时,根据我的理解,暗示一个有趣的-product,我称之为“中间最优性属性”(对this question等某些应用程序可能非常有用)如下所述:
在 k 迭代之后,我们有每个节点用相同来源的最短路径标识,在路径中#edges的约束下是< = ķ
在假设存在简单的最短路径的情况下,这将确保为每个目标节点生成SSSPP的最短路径解决方案,最多 | V | -1 迭代。
上述属性是否正确?
据一些人说(例如this question下面的评论),这是不正确的,我不明白为什么!!
(更新:我在所有顶点上使用并行更新。)
答案 0 :(得分:3)
假设我们有一个简单的图A-> B-> C-> D,所有权重都等于1.
如果我们按照A,B,C,D的顺序访问顶点,那么在第一次迭代期间,我们将放松以下所有内容:
A->B, finds shortest path to B is 1
B->C, finds shortest path to C is 2
C->D, finds shortest path to D is 3.
所以在第一次迭代中我们找到了到D的最短路径,尽管这条路径需要3条边。
但是,如果以D,C,B,A的顺序访问顶点,则需要更多次迭代才能找到D的最短路径。
换句话说,在k次迭代之后,我们肯定会找到#edges< = k的任何最短路径,但是我们也可能找到了一条使用更多边缘的更好路径。