经过大量的Google搜索,我发现大多数消息人士说Dijkstra算法比Bellman-Ford算法“更有效”。但是在什么情况下,Bellman-Ford算法比Dijkstra算法更好?

我知道“更好”是一个广义的说法,因此我特别指的是速度和空间(如果适用)。当然,在某些情况下,Bellman-Ford方法比Dijkstra方法更好。

最佳答案

Bellman-Ford算法是一种单源最短路径算法,因此,当边缘权重为负时,它可以检测图形中的负周期。

两者之间的唯一区别是Bellman-Ford也能够处理负数权重,而Dijkstra算法只能处理正数权重。

wiki



然而,通常认为在没有负权重边缘的情况下更好地使用Dijkstra,因为典型的二进制堆优先级队列实现具有O((| E | + | V |)log | V |)时间复杂度[Fibonacci堆优先级队列给出O(( | V | log | V | + | E |)],而Bellman-Ford算法具有O(| V || E |)复杂度

10-08 04:17