这是一道关于it技术的练习考试题,我正在努力解决:
给定一个加权无向连通图G =(V,E),其中权重为正(您可以假设权重不同)。给定实数r,请定义子图Gr =(V,{e in E | w(e)<= r})。例如,G0没有边(显然不连通),而Ginfinity = G(根据假设是连通的)。问题是找到最小的r使得Gr连通。
请描述一种O(mlogn)时间复杂度的算法,通过BFS或DFS的反复应用解决问题。
真正的问题是在O(mlogn)中完成它。以下是我的进展:
给定一个加权无向连通图G =(V,E),其中权重为正(您可以假设权重不同)。给定实数r,请定义子图Gr =(V,{e in E | w(e)<= r})。例如,G0没有边(显然不连通),而Ginfinity = G(根据假设是连通的)。问题是找到最小的r使得Gr连通。
请描述一种O(mlogn)时间复杂度的算法,通过BFS或DFS的反复应用解决问题。
真正的问题是在O(mlogn)中完成它。以下是我的进展:
r = min( w(e) ) => O(m)
while true do => O(m)
Gr = G with edges e | w(e) > r removed => O(m)
if | BFS( Gr ).V | < |V| => O(m + n)
r++ (or r = next smallest w(e))
else
return r
这个算法的时间复杂度是O(m^2 + mn),你有什么办法将它降至O(mlogn)吗?谢谢!