我使用队列实现了Bellman-Ford算法的解决方案,并将其性能与Dijkstra算法进行了比较。他们非常接近,这对我来说是一个惊喜,因为贝尔曼 - 福特的复杂性是O(NM)。我知道复杂性是最坏的情况,但结果仍然令人惊讶。我搜索了有关Bellman - Ford的一些信息,我在Sedgewick中发现了这个声明,Java中的算法“在实际网络中,Bellman-Ford算法通常在线性时间内运行”。 你能给我一个Bellman - Ford算法性能行为的解释吗?
答案 0 :(得分:5)
这是一篇关于它的文章非常简单(PDF Link)。
Bellman-Ford的复杂性 算法取决于数量 边缘考试,或放松电话。 (注意这与...不同 放松步骤,指的是 实际的变化。) 如上所述,放松的次数 调用可以小于| V || E |同 BGL实现。事实上,它是 远小于| V || E |在里面 平均情况。
它列出了伪代码和进一步的分析。