SPFA算法:AcWing 851. spfa求最短路

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

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 是一个较小的常数

注意,在特殊构造的图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值