在稀疏图中查找所有最短路径的最快算法是什么?


24

在具有V顶点和E边(使得的未加权,无向图中,找到图中所有最短路径的最快方法是什么?是否可以比Floyd-Warshall(但每次迭代都快)更快地完成?O V 32V>EO(V3)

如果图形加权了怎么办?

Answers:


32

由于这是未加权的图,因此您可以从图中的每个顶点v运行广度优先搜索(BFS)。BFS的每次运行都会为您提供从起始顶点到其他每个顶点的最短距离(和路径)。一个BFS的时间复杂度为O V + E = O V ),因为在稀疏图中E = O V 。运行V次会给您O V 2时间复杂度。vO(V+E)=O(V)E=O(V)VO(V2)

对于加权有向图,Yuval建议的约翰逊算法对于稀疏图是最快的。它取,在您的情况下为O V 2 log V 。对于加权无向图,您可以运行Dijkstra的算法O(V2logV+VE)O(V2logV)从每个节点开始,或将每个无方向的边替换为两个相对的有向边,然后运行Johnson算法。对于您的稀疏情况,这两种方法都将具有与上述Johnson方法相同的渐近时间。还要注意,我上面提到的BFS方法适用于有向图和无向图。



7

您可以尝试制作一个在稀疏矩阵上更快的Floyd-Warshall版本。

首先,让我们回顾一下该算法的作用:

为距离矩阵。在算法M i的开头j是边i j的权重。如果该边缘不存在,则M i j = MMi,ĴiĴM一世Ĵ=

该算法有步骤。在步骤ķ的算法的,对于每对节点的Ĵ我们集Vķ一世Ĵ

Mi,jmin{Mi,j,Mi,k+Mk,j}.

显然,如果M k j = ∞,则无需执行更新。因此,在该算法的第一步骤中,我们只需要执行大致d Ë Ñķ d È ø ù ķ 比较,其中d Ë Ñķ d Ë Ò ù tMi,k=Mk,j=dËG一世ñķdËGØüŤķdËG一世ñķ分别表示第 k个节点的传入和传出边缘的数量。随着算法的发展,矩阵 M的条目越来越多。因此,最后的步骤可能需要更长的时间。dËGØüŤķķ中号

注意,我们需要一种有效的方法来仅对矩阵的第行和列中的非无限单元进行迭代。这可以通过为每个节点保留一组入站和出站边来完成。ķ

Ë=ØVķ=0Ø1个中号ØVk=|V|O(V2)O(V3)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.