首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Floyd-Warshall限制为路径长度k

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

Stack Overflow用户
提问于 2013-03-17 21:42:41
回答 1查看 795关注 0票数 1

我正在实现Floyd-Warshall algorithm

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-07 08:02:41

假设w(i,j)是从i到j的权重,则可以计算

代码语言:javascript
复制
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也是如此。请注意,您可以在不先计算w3的情况下计算w4。使用这种形式的二值化,即计算和组合所有2的幂矩阵,您可以实现O(n³log )的时间复杂度,即最大路径长度仅为对数。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15461405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档