最短路问题
![]() |
本条目需要擴充。(2013年2月14日) |

一个有6个节点和7条边的图
最短路径问题是图论研究中的一个经典算法问题,旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。算法具体的形式包括:
确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。适合使用Dijkstra算法。
确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。
确定起点终点的最短路径问题 - 即已知起点和终点,求两结点之间的最短路径。
全局最短路径问题 - 求图中所有的最短路径。适合使用Floyd-Warshall算法。
用于解决最短路径问题的算法被称做“最短路径算法”,有时被简称作“路径算法”。最常用的路径算法有:
- Dijkstra算法
- A*算法
- Bellman-Ford算法
SPFA算法(Bellman-Ford算法的改进版本)- Floyd-Warshall算法
- Johnson算法
- Bi-Direction BFS算法
![]() |
这是一篇关于数学的小作品。你可以通过编辑或修订扩充其内容。 |
图与树 搜索算法 |
---|
|
分类 |
|
相关主题 |
|
目录
1 单源最短路径算法
1.1 无向图
1.2 无权图
1.3 有向无环图
1.4 无负权的有向图
单源最短路径算法
无向图
权值要求 |
时间复杂度 |
作者 |
---|---|---|
ℝ+ |
O(V2){displaystyle O(V^{2})} |
Dijkstra 1959 |
ℝ+ |
O((E+V)logV){displaystyle O((E+V)logV)} |
Johnson 1977 (二叉堆) |
ℝ+ |
O(E+VlogV){displaystyle O(E+VlogV)} |
Fredman & Tarjan 1984 (斐波那契堆) |
ℕ |
O(E){displaystyle O(E)} |
Thorup 1999 (要求常数时间复杂度的乘法)。 |
无权图
算法 |
时间复杂度 |
作者 |
---|---|---|
深度优先搜索 |
O(E+V){displaystyle O(E+V)} |
有向无环图
使用拓扑排序算法可以在有权值的DAG中以线性时间(θ(E+V){displaystyle theta (E+V)})求解单源最短路径问题。
无负权的有向图
假设边缘权重均为整数。
算法 |
时间复杂度 |
作者 |
---|---|---|
O(V 2EL) |
Ford 1956 |
|
Bellman–Ford 算法 |
O(VE) |
Shimbel 1955, Bellman 1958, Moore 1959 |
O(V 2 log V) |
Dantzig 1960 |
|
Dijkstra's 算法(列表) |
O(V 2) |
Leyzorek et al. 1957, Dijkstra 1959, Minty (see Pollack & Wiebenson 1960), Whiting & Hillier 1960 |
Dijkstra's 算法(二叉堆) |
O((E + V) log V) |
Johnson 1977 |
. . . |
. . . |
. . . |
Dijkstra's 算法(斐波那契堆) |
O(E + V log V) |
Fredman & Tarjan 1984, Fredman & Tarjan 1987 |
O(E log log L) |
Johnson 1981, Karlsson & Poblete 1983 |
|
Gabow's 算法 |
O(E logE/VL) |
Gabow 1983, Gabow 1985 |
O(E+Vlogl){displaystyle O(E+V{sqrt {log l}})} |
Ahuja et al. 1990 |
|
Thorup |
O(E + V log log V) |
Thorup 2004 |
|
|
Comments
Post a Comment