贝尔曼福特算法
与其他动态规划问题一样,该算法以自底向上的方式计算最短路径。它首先计算路径中最多有一条边的最短距离。然后,它计算最多有 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 现场工作专业课程和学生竞争性编程现场课程。