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

📅  最后修改于: 2021-04-29 06:21:45             🧑  作者: 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.