【问题标题】:Is the result of Bellman-Ford "all pairs" or "from one node" shortest paths? / Is there an all-pairs Bellman-Ford version?Bellman-Ford 的结果是“所有对”还是“从一个节点”最短路径? / 是否有全双 Bellman-Ford 版本?
【发布时间】:2017-07-16 10:14:11
【问题描述】:

我最近在学习图算法,在我的大学里我们被教导,Bellman-Ford 的结果是一个从所有节点到所有其他节点的距离表(所有对最短路径)。但是我不明白算法是如何实现的,并试图通过观看 YouTube 视频和在维基百科中查找定义等来理解它......

现在问题来了:
我找不到以结果将是所有对最短路径表的方式描述该算法的资源,但只有“从一个节点到所有其他节点”。

可以调整 Bellman-Ford 算法以实现所有对最短路径表,还是我的大学讲师对此完全错误? (他确实解释了一些提供所有对最短路径的算法,他称之为 Bellman-Ford,但我认为这不可能是 Bellman Ford)

编辑:我完全理解“从一个节点到所有其他节点的最短路径”问题的 Bellman-Ford 算法。
我也了解我大学教授的“所有对最短路径”算法的大部分内容。
我只是很困惑,因为我大学的算法也被称为“Bellman-Ford”。
如果你说德语:这是一个视频,大学讲师谈论他的“Bellman-Ford”(我认为这实际上不是 Bellman-Ford):
https://www.youtube.com/watch?v=3_zqU5GWo4w&t=715s

【问题讨论】:

  • 我不懂德语,但是当我打开视频时,有文字“Floyd Warshal”,正如我在回答中所写的那样 Floyd Warshal 的主要目的是所有对最短路径,顺便说一句我从来没有听说 Bellman Ford 可以以某种不同的方式用于所有对的最短路径,而不是从每个节点运行它。可能讲师的意思是弗洛伊德沃沙尔而不是贝尔曼福特。
  • @someone12321 检查描述 - 他也解释了贝尔曼福特

标签: algorithm graph bellman-ford


【解决方案1】:

Bellman Ford 是一种用于查找从给定起始节点到图中任何其他节点的最短路径的算法。

使用贝尔曼福特,如果我们从每个节点运行贝尔曼福特算法,然后得到所有其他节点的最短路径,我们可以生成所有对的最短路径,但该算法的最坏情况时间复杂度将是 O(V * V * E) 如果我们有完整的图,这个复杂度将是 O (V^4),其中 V 是图中顶点(节点)的数量, E 是图中的边数。

有更好的算法可以找到所有对的最短路径,它的时间复杂度为 O(V^3)。这就是 Floyd Warshall 算法。

您可以在这里阅读更多相关信息:https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm

【讨论】:

  • 迄今为止的最佳答案。如果再解释一下,也许你会有更多的想法:“大学”算法使用了编码 N 个节点的边缘的NxN 矩阵。然后是奇怪的部分。他使用该矩阵与自身的乘法来确定较短的路径长度,然后接收所有对最短路径矩阵。不过,这在我看来一点也不像贝尔曼福特。所以我猜解说员把名字弄乱了。
  • 嗯,贝尔曼福特和弗洛伊德战争是完全不同的算法,它们适用于不同的原则,通常当我们谈论“所有对最短路径”时,我们指的是弗洛伊德战争,因为它是唯一的算法所有对最短路径,如果您从图中的所有节点运行 bellman ford 或 dijsktra,您可以获得所有对最短路径,但 floyd warshall 对于查找所有对最短路径是特殊的。
【解决方案2】:

算法的目的是找到从起点到终点的最短路径。

为此,它会找到从所有点到每个其他点的最短距离,然后选择通向解决方案的路径并加起来最短。

首先,它从起点 (A) 开始。将每个点的成本设置为无穷大。

现在它可以看到来自 A 的所有可能方向。并且 A 的初始成本设置为零。

假设它只需要前往 B。可能有一条直路将 B 连接到 A,其成本是 10。

但是也有一条通过 C 的路径。从 A 到 C 需要花费 5,从 C 到 B 只需花费 2。这意味着从 A 到 B 有两种可能的路径。一个花费 10和其他 5+2 即 7 。所以它应该将到达 B 的成本从 A 更新为 7 而不是 10,因此应该选择路径。

你可以想象同样的情况,但有更多的点。它应该从起点搜索到终点,遍历所有可能的路径,并在需要时更新/不更新成本。最后它会寻找所有路径并选择成本最小的路径。

现在问题来了:a 我找不到资源 以结果将是全部的方式描述算法 配对最短路径表,但仅限于“从一个节点到所有其他节点 节点”。

要理解这一点,假设我们必须从 A 到 D。

下面列出了从一个点移动到另一个点的个人成本

  • A 到 B :15

  • A 到 C :10

  • B 到 C :3

  • 早到晚:5

  • C 到 D :15

最初将所有点设置为无穷大,除了 A 为零。

首先,

A->B : Cost=15(将 B 的成本更新为 15)

A->C : Cost=10(将 C 的成本更新为 10)

B->C : Cost=18(B 的成本加上 B->C 单独的成本,所以不要更新,因为 C 的成本已经小于这个了)

C->B : Cost=13(C 的成本加上 C->B 单独的成本,将 B 的成本更新为 13,因为它小于 15)

B->D : Cost=18(B 的新成本加上 B->D 单独的成本,将 D 的成本更新为小于无穷大)

C->D : Cost=25(C 的成本加上 C->D 单独的成本,不要更新 D)

所以算法选择的路径是通向 D 的路径,成本为 18,结果是成本最小!

     B  
  /  |  \ 
A    |   D
  \  | /
     C

A->C->B->D 成本:18

现在您可以阅读this 链接以获得更好的理解。事情应该很清楚了。

【讨论】:

  • 您没有解释任何关于“所有对最短路径”的内容 - 只是“从一个节点到所有其他节点”.. - 将编辑标题以使其更清晰。我认为我的问题是讲解员称为算法 Bellman-Ford 这实际上是别的东西(我不敢相信他弄错了) - 这让我感到困惑,我现在不知道什么是“Bellman-Ford “其实是。我得出的结论是,官方的 Bellman-Ford 只处理“从一个节点”而不是“从所有节点”到所有其他节点的最短路径
【解决方案3】:

我在我们的大学论坛上提问,得到了如下答案:

Bellman-Ford 最初是“来自一个节点”。然而,当将原始的 Bellman-Ford 算法应用于 Graph 的每个节点时,不变量(算法背后的想法)不会改变。

原始 Bellman-Ford 的复杂度为 O(V^3),如果从每个节点开始,则复杂度为 O(V^4)。但是有一个技巧可以使用,因为算法过程中的发现类似于输入矩阵(包含直接路径长度)与其自身的矩阵乘法。因为这是一个数学环,一个人可以作弊,简单地计算矩阵^2、矩阵^4、矩阵^8等等(虽然这是我没有完全理解的部分)并且可以实现O(V^3 * log V )。

他也将此算法称为 Bellman-Ford,因为该算法背后的不变量/思想仍然相同。

German answer in our public university forum

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-25
    • 2015-07-22
    • 1970-01-01
    • 2014-05-24
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    相关资源
    最近更新 更多