Answers:
由于这是未加权的图,因此您可以从图中的每个顶点v运行广度优先搜索(BFS)。BFS的每次运行都会为您提供从起始顶点到其他每个顶点的最短距离(和路径)。一个BFS的时间复杂度为O (V + E )= O (V ),因为在稀疏图中E = O (V )。运行V次会给您O (V 2)时间复杂度。
对于加权有向图,Yuval建议的约翰逊算法对于稀疏图是最快的。它取,在您的情况下为O (V 2 log V )。对于加权无向图,您可以运行Dijkstra的算法从每个节点开始,或将每个无方向的边替换为两个相对的有向边,然后运行Johnson算法。对于您的稀疏情况,这两种方法都将具有与上述Johnson方法相同的渐近时间。还要注意,我上面提到的BFS方法适用于有向图和无向图。
有约翰逊算法,其运行时间为。
您可以尝试制作一个在稀疏矩阵上更快的Floyd-Warshall版本。
首先,让我们回顾一下该算法的作用:
令为距离矩阵。在算法M i的开头,j是边i → j的权重。如果该边缘不存在,则M i ,j = ∞。
该算法有步骤。在步骤ķ的算法的,对于每对节点的我,Ĵ我们集
显然,如果或M k ,j = ∞,则无需执行更新。因此,在该算法的第一步骤中,我们只需要执行大致d Ë 克我Ñ(ķ )⋅ d È 克ø ù 吨(ķ )比较,其中d Ë 克我Ñ(ķ )和d Ë 克Ò ù t(分别表示第 k个节点的传入和传出边缘的数量。随着算法的发展,矩阵 M的条目越来越多。因此,最后的步骤可能需要更长的时间。
注意,我们需要一种有效的方法来仅对矩阵的第行和列中的非无限单元进行迭代。这可以通过为每个节点保留一组入站和出站边来完成。