贝尔曼·福特算法
像其他动态编程问题一样,该算法以自底向上的方式计算最短路径。它首先计算路径中最多具有一个边缘的最短距离。然后,它计算最多具有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. |