是否有算法可以找到每个节点与所有其他节点的距离

时间:2016-11-04 19:37:59

标签: algorithm graph dijkstra

我希望从所有其他节点获得所有节点的距离。例如,如果我有4个节点,那么我想要路径距离

(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)

即。所有可能的配对

注意:每个节点都有一个来自其他每个节点的路径。

我的方法: 我想过应用Dijkstra算法,但它适用于单个源,然后我必须将它作为源应用于每个节点,然后从它们中取出具有非常高复杂度的唯一对。

编辑: 如果我有一个最小生成树并且必须执行相同的任务,那会是什么情况? 我的意思是从一个节点到另一个节点只有一条路径。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用Floyd–Warshall algorithm 时间复杂度为V,其中1 let dist be a |V| × |V| array of minimum distances initialized to ∞ (infinity) 2 for each vertex v 3 dist[v][v] ← 0 4 for each edge (u,v) 5 dist[u][v] ← w(u,v) // the weight of the edge (u,v) 6 for k from 1 to |V| 7 for i from 1 to |V| 8 for j from 1 to |V| 9 if dist[i][j] > dist[i][k] + dist[k][j] 10 dist[i][j] ← dist[i][k] + dist[k][j] 11 end if 是节点数。

来自维基百科的伪代码:

O(V*(V+E))

如果您正在使用树,请为每个节点创建一个BFS。这需要O(V^2),实际上是E = V-1,因为V*(V-1)在树中。

由于输出(所有对距离)大小为O(V^2),因此无法在UriTemplate uriTemplate = new UriTemplate("/product-catalogue/categories/{categoryName}/products/{product-name}"); 以内完成此操作。