これは、私が苦労している模擬試験の問題です。
G = (V, E) を、正の重みを持つ重み付き無向連結グラフとします (重みが異なると仮定してもかまいません)。与えられた実数 r に対して、部分グラフ Gr = (V, {e in E | w(e) <= r}) を定義します。たとえば、G0 にはエッジがなく (明らかに接続されていません)、Ginfinity = G (仮定により接続されています) です。問題は、Gr が接続されるような最小の r を見つけることです。
BFS または DFS を繰り返し適用して問題を解決する O(mlogn) 時間アルゴリズムを説明してください。
本当の問題は、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) に下げるためのアイデアはありますか? ありがとう!