我正在尝试解决关于图的算法挑战,我已设法将其分解为以下内容:给定无向生成树,找到2个叶子,使得它们之间的成本最小。
现在我知道Floyd Warshall算法可以找到具有时间复杂度O(N ^ 3)和空间复杂度O(N ^ 2)的所有对最短路径。问题的输入是N = 10 ^ 5,因此O(N ^ 3)和O(N ^ 2)太多。
有没有办法优化此问题的空间和时间复杂度?
答案 0 :(得分:1)
正如@Codor所说,详细说明,在MST中,任何一对节点只有一条唯一的路径,同样也是最短的路径。 为了计算所有对的最短路径b / w。 您可以选择遵循此算法。
您基本上可以通过不断删除叶节点来选择找到MST的根,直到只剩下一个或两个节点。
复杂性:centre node in a tree 这可以用O(V)即线性时间
选择其中一个作为root。使用Breadth First Search(BFS)计算所有其他节点相对于根节点的距离。
复杂性:在树的情况下O(V + E)~O(V)
现在你可以找到距离b / w任何一对节点称之为a,b。找到它的least common ancestor(lcp)。 然后有两种情况,如果
其中dis(x,y)=距离b / w节点x,y 和dis [x]节点x与根节点的距离 如果使用Ranked Union Find
实施复杂度:O(h),其中h是每对(a,b)树的高度。 h = X / 2,其中X是树的diameter。 总复杂性取决于否。叶节点对。