SPFA算法分析:
SPFA算法实际上是“队列优化的Bellman-Ford 算法”。
SPFA 算法的流程如下:
- 1.建立一个队列,最初队列中只含有起点
1。 - 2.取出队头节点
x,扫描它的所有出边(x,y,z),若dist[y] > dist[x]+z,则使用dist[x]+z更新dist[y]。同时,若y不在队列中,则把y入队。 - 3.重复上述步骤,直到队列为空。
在任意时刻,该算法的队列都保存了待扩展的节点。每次入队相当于完成一次 dist数组的更新操作,使其满足三角形不等式。
一个节点可能会入队、出队多次。最终,图中节点收敛到全部满足三角形不等式的状态。
这个队列 避免了Bellman-Ford算法中对不需要扩展的节点的冗余扫描,在随机图上运行效率为 O(km)级别,其中 k 是一个较小的常数。
注意,在特殊构造的图
SPFA算法详解:优化的Bellman-Ford在随机图中的高效求解

本文详细介绍了SPFA算法,它是队列优化的Bellman-Ford算法,通过维护待扩展节点的队列,避免冗余扫描,适用于随机图,平均时间复杂度为O(m)。特别指出在特殊情况下可能退化为O(nm),并讨论了如何优化为堆优先队列在非负权图上的O(mlogn)效率。
最低0.47元/天 解锁文章
336

被折叠的 条评论
为什么被折叠?



