几种最短路算法对比

!> 众所周知,关于SPFA,它死了。

几种最短路算法对比:

名称 时间复杂度 优点 缺点 使用情况
Floyd-Warshall \(O(n ^ 3)\) 仅有的多源最短路径算法(即跑一遍Floyd能求出每个点到其它点的距离)、其核心代码就 5 行 时间复杂度过高 多源最短路、对时间复杂度没要求
Dijkstra \(O(n ^ 2)\) 时间复杂度比较低,具有良好的可扩展性 编码复杂度非常高、不能处理负权,即边的权值是负数的情况(跟它用的是贪心有关) 稠密图且是单源最短路、对时间复杂度有要求
Bellman-Ford \(O(nm)\) 我个人比较喜欢的算法,能处理负权,时间复杂度还行,而且核心代码只有 4 行 跟Dijkstra时间复杂度互有胜负,有时还是 Dijkstra赢了 稀疏图
SPFA 最坏也是 \(O(nm)\) 优化版Bellman-Ford 众所周知,它死了 别用
BFS \(O(n + m)\) 思路简单 只能处理等权图或无权图 等权图/无权图

注:\(n\) 为点的个数,\(m\) 为边的个数。

posted @ 2024-01-29 10:41  worker2011  阅读(5)  评论(0编辑  收藏  举报