将Floyd-Warshall限制为路径长度k

时间:2013-03-17 13:42:41

标签: java algorithm graph-algorithm floyd-warshall

我正在实施Floyd-Warshall algorithm

我有大约50个节点的完整图,我想找到所有节点之间的最大路径。 算法返回的路径可以是任何长度1 <1。 x <50,我需要这个长度最多3-4个边长,我怎么能改变算法呢?

1 个答案:

答案 0 :(得分:1)

w(i,j) i j 的权重。然后你可以计算

def shortest(w1, w2):
  w12 = a new V x V matrix
  for i in V:
    for j in V:
      w12(i, j) = w1(i, j)
      for k in V:
        if w12(i, j) > w1(i, k) + w2(k, j):
          w12(i, j) = w1(i, k) + w2(k, j)
  return w12

w2 = shortest(w, w)
w3 = shortest(w2, w)
w4 = shortest(w2, w2)

最后,w4将为每对使用最多4条边的开始到结束的距离,w3也是如此。请注意,您可以先计算w4而不计算w3。使用这种形式的二值化,即计算和组合所有二次幂矩阵,可以实现O(n³logk)的时间复杂度,即在最大路径长度上只有对数。

维基百科有一篇关于上述算法的简短文章。它标题为“min-plus matrix multiplication”。也许与该术语相关的一些参考或替代术语“距离积”将导致关于可能实现的进一步信息。例如,有一篇论文“faster funny matrix multiplication for the all-pairs shortest paths problem”讨论了这个问题,给出了一些算法,并考虑了SIMD的实现。