Bellman Ford 和 Dijkstra 算法的区别

Bellman Ford 和 Dijkstra 算法的区别

贝尔曼福特算法

与其他动态规划问题一样,该算法以自下而上的方式计算最短路径。它首先计算路径中最多有一条边的最短距离。然后,它计算最多有 2 条边的最短路径,依此类推。在外循环的第 i 次迭代之后,计算最多有 i 条边的最短路径。可以有最大值 |V| – 任何简单路径中的 1 条边,这就是外循环运行 |v| 的原因- 1次。这个想法是,假设如果我们计算了最多有 i 个边的最短路径,则没有负权重循环,那么对所有边的迭代保证给出最多有 (i+1) 个边的最短路径

Dijkstra 算法

Dijkstra 的算法与 Prim 的最小生成树算法非常相似。与 Prim 的 MST 一样,我们生成一个以给定源为根的 SPT(最短路径树)。我们维护两组,一组包含包含在最短路径树中的顶点,另一组包含尚未包含在最短路径树中的顶点。在算法的每一步,我们都会找到一个顶点,它在另一个集合(尚未包含的集合)中并且与源的距离最小。

Bellman Ford 算法和 Dijkstra 算法的区别:

Bellman Ford 算法和 Dijkstra 算法都是单源最短路径算法,即都确定了图的每个顶点到单个源顶点的最短距离。但是,它们之间存在一些关键差异。我们遵循 Bellman Ford 算法中的动态规划方法和 Dijkstra 算法中的贪婪方法。让我们看看这两种技术之间的其他主要区别

Bellman Ford 算法 Dijkstra 算法
贝尔曼福特算法在存在负权重边缘时工作,它还检测负权重循环。 Dijkstra 算法在权重边缘为负时可能有效,也可能无效。但当权重循环为负时,绝对行不通。
结果包含顶点,其中包含有关它们连接到的其他顶点的信息。 结果包含包含有关网络的全部信息的顶点,而不仅仅是它们连接的顶点。
它可以很容易地以分布式方式实现。 它不能以分布式方式轻松实现。
它比 Dijkstra 的算法更耗时。它的时间复杂度是 O(VE)。 它花费的时间更少。时间复杂度为 O(E logV)。
采用动态规划方法来实现该算法。 采用贪心方法来实现该算法。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程