【问题标题】:dijkstra's vs Bellman-Ford algorithm [duplicate]dijkstra vs Bellman-Ford算法[重复]
【发布时间】:2020-03-23 19:07:32
【问题描述】:

我目前的理解是,dijkstra 的算法比 bellman-ford 更有效,只是它不能处理负边缘。但是,如果我们有一个边加权图,其中有负权边,图中没有负权循环,我们还可以使用 dijkstra 算法吗?

【问题讨论】:

标签: algorithm graph dijkstra graph-traversal bellman-ford


【解决方案1】:

这个问题已经在这里得到了很好的回答。 https://stackoverflow.com/a/13159425/12449779

总而言之,Dijkstra 的算法在每次迭代中都在距“标记”顶点最小距离处标记顶点。最初,源顶点是距离为 0 的唯一标记顶点。假设存在两个标记顶点 A 和 B,它们与源之间的距离有限,并且它们的路径重叠。目前,到 A 和 B 的路径将被认为是从 A 到 B 的最短路径。由于路径不重叠,因此从 Source 到 A 到 B 的任何路径的长度都是 source 到 A + 从 A 到路径的长度B 大于从源到 B 的路径,因为从源到 A 和 B 的路径不重叠。但是,如果允许负加权边缘,则 NOT 成立。因为从 A 到 B 的路径长度可能是。因此 Dijkstra 算法不起作用。也没有简单的方法可以将具有负边的一般图转换为具有非负边的图。 Bellman Ford 适用于任何不包含负加权循环的图。

【讨论】:

    猜你喜欢
    • 2015-05-04
    • 1970-01-01
    • 2014-05-24
    • 2015-07-25
    • 1970-01-01
    • 2016-01-27
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多