java计算最长路径spfa_最短路径算法(三):SPFA算法

  • Post author:
  • Post category:java


一、算法介绍

SPFA算法(Shortest Path Faster Algorithm)是基于Bellman-Ford算法的优化

Bellman-Ford算法复杂度: O(V*E) (V:点个数 E:边个数)

SPFA算法复杂度:O(k*E)  k为所有顶点进队的平均次数

缺点:SPFA的算法时间效率不是很稳定

二、算法思想

Bellman-Ford算法 每次迭代时,每次只有松弛的节点 且 Q中不存在此节点时 才入队列Q

SPFA算法有两个优化算法 SLF 和 LLL:

SLF:Small Label First 策略,设要加入的节点是j,队首元素为i,若dist(j)

否则插入队尾。

LLL:Large Label Last 策略,设队首元素为i,队列中所有dist值的平均值为x,若dist(i)>x则将i插入

到队尾,查找下一元素,直到找到某一i使得dist(i)<=x,则将i出对进行松弛操作。

SLF 可使速度提高 15 ~ 20%;SLF + LLL 可提高约 50%。



版权声明:本文为weixin_28753691原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。