我希望从所有其他节点获得所有节点的距离。例如,如果我有4个节点,那么我想要路径距离
(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)
即。所有可能的配对
注意:每个节点都有一个来自其他每个节点的路径。
我的方法: 我想过应用Dijkstra算法,但它适用于单个源,然后我必须将它作为源应用于每个节点,然后从它们中取出具有非常高复杂度的唯一对。
编辑: 如果我有一个最小生成树并且必须执行相同的任务,那会是什么情况? 我的意思是从一个节点到另一个节点只有一条路径。
答案 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}");
以内完成此操作。