【问题标题】:Bellman-Ford algorithm's intermediate optimality property, is it correct?Bellman-Ford 算法的中间最优性,对吗?
【发布时间】:2014-09-12 17:49:59
【问题描述】:

众所周知,Bellman-Ford 算法可以解决具有附加边权重的任意连通图 G(V,E)单源最短路径问题 (SSSPP) , 只要存在。

算法的基本实现版本,例如:Bellman-Ford-Wiki-page 及其proof of correctness,据我了解,当使用所有边的平行松弛时,意味着一个有趣的副产品,它我称之为“中间最优性属性”,(这可能对this question 等一些应用程序非常有帮助)如下所述:

k 次迭代之后,我们有 每个 节点标识其来自同一源的最短路径,在路径中#edges 的约束下是 k

在简单最短路径存在的假设下,这将确保为每个目标节点生成 SSSPP 的最短路径解决方案,至多 |V|-1 次迭代。

上述属性正确吗?

根据某些人的说法(例如 this question 下方的 cmets),这是不正确的,我不明白为什么!!

(更新:我正在对所有顶点使用并行更新。)

【问题讨论】:

    标签: algorithm graph-theory shortest-path


    【解决方案1】:

    假设我们有一个简单的图 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

    【讨论】:

    • 太完美了。我想对所有顶点使用并行更新。那是正确的吗?
    • 抱歉,我没有意识到您正在使用并行更新。在那种情况下,我认为您的属性确实是正确的。
    • 非常感谢您的最快澄清。今天我一直在努力确认这一点..
    猜你喜欢
    • 1970-01-01
    • 2015-08-27
    • 2015-05-04
    • 2020-03-23
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多