视频加载失败

几种最短路算法对比

几种最短路算法对比
330 字
2 分钟
几种最短路算法对比
WARNING

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

几种最短路算法对比:

名称时间复杂度优点缺点使用情况
Floyd-WarshallΘ(n3)\Theta(n ^ 3)仅有的多源最短路径算法(即跑一遍 Floyd 能求出每个点到其它点的距离)、其核心代码就 5 行时间复杂度过高多源最短路、对时间复杂度没要求
Dijkstra(朴素)Θ(n2)\Theta(n ^ 2)无编码复杂度非常高、不能处理负权,即边的权值是负数的情况(跟它用的是贪心有关)不怎么用
Dijkstra(优先队列优化)Θ(mlog⁡m)\Theta(m \log m)最快了同朴素版对时间复杂度有要求
Bellman-FordΘ(nm)\Theta(nm)我个人比较喜欢的算法,能处理负权,时间复杂度还行,而且核心代码只有 4 行跟 Dijkstra 时间复杂度互有胜负,有时还是 Dijkstra 赢了稀疏图
SPFA最坏也是 Θ(nm)\Theta(nm)优化版 Bellman-Ford众所周知,它死了稀疏图
JonsonΘ(nm+nmlog⁡m)\Theta(nm + nm \log m)仅有的全源最短路算法,结合了 Dijksra 和 SPFA 的优势感觉跑多遍单源叫多源比较牵强、编码复杂度极高不怎么常用……
BFSΘ(n+m)\Theta(n + m)思路简单只能处理等权图或无权图等权图/无权图

注:nn 为点的个数,mm 为边的个数。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
几种最短路算法对比
https://www.leo2011.eu.org/posts/shortest-path/
作者
Block_Fish
发布于
2024-01-29
许可协议
SATA

评论区

Profile Image of the Author
Block_Fish
大胆假设,小心求证。——胡适
公告
网站全面重构,有问题欢迎联系积木鱼!
分类
标签
最新动态
站点统计
文章
56
分类
7
标签
17
总字数
84,805
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Netlify CI
博客版本
Firefly v6.16.8
文章许可
SATA

当前页面没有目录

文章目录

当前页面没有目录