📜  Bellman Ford 和 Dijkstra 的算法有什么区别?

📅  最后修改于: 2021-09-11 03:42:44             🧑  作者: Mango

贝尔曼福特算法
与其他动态规划问题一样,该算法以自底向上的方式计算最短路径。它首先计算路径中最多有一条边的最短距离。然后,它计算最多有 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’s Algorithm Dijkstra’s Algorithm
Bellman Ford’s Algorithm works when there is negative weight edge, it also detects the negative weight cycle. Dijkstra’s Algorithm doesn’t work when there is negative weight edge.
The result contains the vertices which contains the information about the other vertices they are connected to. The result contains the vertices containing whole information about the network, not only the vertices they are connected to.
It can easily be implemented in a distributed way. It can not be implemented easily in a distributed way.
It is more time consuming than Dijkstra’s algorithm. Its time complexity is O(VE). It is less time consuming. The time complexity is O(E logV).
Dynamic Programming approach is taken to implement the algorithm. Greedy approach is taken to implement the algorithm.

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。