【发布时间】:2012-06-02 11:46:23
【问题描述】:
Skiena 的算法书包含对Floyd Warshall algorithm 的以下解释:
floyd(adjacency_matrix *g)
{
int i,j; /* dimension counters */
int k; /* intermediate vertex counter */
int through_k; /* distance through vertex k */
for (k=1; k<=g->nvertices; k++)
for (i=1; i<=g->nvertices; i++)
for (j=1; j<=g->nvertices; j++) {
through_k = g->weight[i][k]+g->weight[k][j];
if (through_k < g->weight[i][j])
g->weight[i][j] = through_k;
}
}
Floyd-Warshall 全对最短路径在 O(n3) 时间内运行,这是渐近的 不比对 Dijkstra 算法的 n 次调用更好。然而,循环是如此 紧凑且程序如此之短,以至于它在实践中运行得更好。它是值得注意的 在邻接矩阵上比邻接更有效的稀有图算法 列表。
有人可以详细说明为什么粗体部分是真的吗?
【问题讨论】:
-
您是否尝试过编写代码来运行 n 个 Dijkstra 算法实例?...
标签: algorithm graph shortest-path floyd-warshall