贝尔曼-福特的结果是"all pairs"还是"from one node"最短的路径?/ 有全对贝尔曼-福特版本吗?



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

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

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

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

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

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

有更好的算法来查找所有对最短路径,该算法在O(V^3)时间复杂度下工作。这就是弗洛伊德·沃歇尔算法。

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

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

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

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

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

想象一下,它只需要前往B。一条可能有一条直线路径将 B 连接到 A,其成本为 10。

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

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

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

要理解这一点,想象一下我们必须达到A到D。

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

  • A 到 B :15

  • A 到 C :10

  • B 至 C :3

  • B 到 D :5

  • C 到 D :15

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

第一

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

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

B->C :成本=18(B 的成本加上 B->C 本身的成本,所以不要更新为 C 的成本,因为已经小于此成本)

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

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

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

因此,算法选择的路径是导致 D 的路径,成本为 18,这是最小的成本!

B  
/  |   
A    |   D
  | /
C

A->C->B->D 费用:18

现在您可以阅读此链接以更好地理解。事情应该很清楚。

我在大学论坛上问过,得到了以下答案:

贝尔曼-福特最初是"从一个节点"。然而,当将原始贝尔曼-福特算法应用于图的每个节点时,不变性(算法引擎盖下的想法)不会改变。

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

他称这种算法为贝尔曼-福特,因为算法背后的不变/想法仍然是一样的。

在我们的公立大学论坛上回答德语

最新更新