在最短路径算法中,常用的有Dijkstra、Bellman-ford、spfa、Floyd这四大算法
- Dijkstra:迪克斯特拉算法
- Bellman-ford:贝尔曼-福特算法
- SPFA:Shortest Path Faster Algorithm算法
- Floyd:弗洛伊德算法
四大算法介绍
简介
Dijkstra:是一种用于求解单源最短路径的贪心算法。它从起始节点开始,逐步扩展到其他节点,每次选择当前距离起始节点最近的节点进行扩展。通过不断更新节点的最短距离,最终得到起始节点到其他所有节点的最短路径(Dijkstra算法(求最短路))
Belman-ford:是一种用于求解单源最短路径的动态规划算法。它通过对图中所有边进行松弛操作,逐步更新节点的最短距离。贝尔曼-福特算法可以处理带有负权边的图,并且能够检测出图中是否存在负权回路(Bellman-Ford算法)
SPFA:是一种用于解决单源最短路径问题的算法,它也是对Bellman-Ford算法的一种优化。SPFA算法的基本思想是利用队列来存储待处理的顶点,通过不断地松弛操作来更新顶点的最短路径值
Floyd:又称插点法,是一种用于求解任意两点间最短路径的动态规划算法。它通过不断更新节点之间的最短距离,逐步求解出所有节点之间的最短路径。弗洛伊德算法适用于有向图或无向图,可以处理带有负权边的图
时间复杂度
| 算法 | 时间复杂度 |
| 一般Dijkstra | O(n^2) |
| 堆优化版Dijkstra | O(mlogn) |
| Belman-ford | O(nm) |
| spfa | 一般O(m),最坏O(nm) |
| Floyd | O(n^3) |
适用场景
| 算法 | 适用场景 | 最短路问题 |
| 一般Dijkstra | 所有边权都是正数 | 单源最短路 |
| 堆优化版Dijkstra | ||
| Belman-ford |

本文详细介绍了四种常见的最短路径算法:Dijkstra、Bellman-ford、SPFA和Floyd,包括它们的工作原理、适用场景、时间复杂度,以及堆优化版Dijkstra的改进。这些算法在单源最短路径问题中各有特色,适用于不同图的性质,如存在负权边和负权环的处理。
&spm=1001.2101.3001.5002&articleId=136272927&d=1&t=3&u=96c3d0f18b0c443c834d276b221b48fa)
3222

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



