首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最小生成树的全对最短路径

最小生成树的全对最短路径
EN

Stack Overflow用户
提问于 2017-03-07 10:44:10
回答 1查看 1.7K关注 0票数 1

我试图解决一个关于图的算法挑战,我已经将它分解为以下几个方面:给定一个无向生成树,找到2叶,使得它们之间的代价最小。

现在我知道了Floyd算法,它可以找到具有时间复杂度O(N^3)和空间复杂度O(N^2)的所有对最短路径。问题的输入是N= 10^5,所以O(N^3)和O(N^2)太多了。

有没有办法优化这个问题的时间和空间复杂度?

EN

回答 1

Stack Overflow用户

发布于 2017-03-07 13:17:31

正如@Codor所述,在MST中,任何一对节点都只有一条唯一的路径b/w,最短路径也是相同的。为了计算最短路径b/w所有对。您可以选择遵循此算法。

  • 您基本上可以通过不断移除叶节点来选择MST的根,直到只剩下一个或两个节点。 复杂性:树中的中心节点 --这可以在O(V)即线性时间内实现
  • 选择其中之一作为根。使用宽度优先搜索(BFS)计算所有其他节点相对于根节点的距离。 复杂度: O(V+E) ~ O(V)在树的情况下
  • 现在,您可以找到距离b/w,任何一对节点都称其为a,b。查找其最小共同祖先(lcp)。那么有两种情况如果
代码语言:javascript
运行
复制
1. lcp(a,b) = r (root of the tree). dis(a,b) = dis[a] + dis[b]
2. lcp(a,b) = c ( which is not the root node) dis(a,b) = dis[a] + dis[b] - 2 \* dis[c] 

其中dis(x,y) =距离b/w节点x,y和disx节点x从根节点的距离,如果使用排名联合查找

复杂度: O(h),其中h是每对(a,b)树的高度。H= X/2,其中X是树的直径。因此,完全的复杂性取决于no。叶节对。

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

https://stackoverflow.com/questions/42646139

复制
相关文章

相似问题

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