木を形成するグラフが与えられた場合、葉までの最小距離を最大にする頂点を見つけることに興味があります。
この問題は以前に研究されたと思います。この問題の名前またはそれを解決するためのアルゴリズムを知っている人はいますか?
木を形成するグラフが与えられた場合、葉までの最小距離を最大にする頂点を見つけることに興味があります。
この問題は以前に研究されたと思います。この問題の名前またはそれを解決するためのアルゴリズムを知っている人はいますか?
回答:
葉から最大距離の頂点を見つけるには、多くの開始点、つまり葉から始まる幅優先検索を実行できます。BFSは検索のソースから可能な最短のパスで各ノードを訪問するため、最も近い葉までの距離を各ノードに簡単に帰属できます。
すべてのリーフにわたるのペアのコレクションをキューに挿入し、を記録し。
キューが空になるまで以下を繰り返します。
キューからペアポップします。もし、インサート最大距離要素のコレクションです。
訪問されていない隣接するノードがある場合、そのような各隣接ペアにペアをプッシュし、訪問されたものとしてマークします。そのようながある場合は、最大距離要素のコレクションを空にし(空でない場合)、ます。
結果は、すべての葉から少なくとも距離にあるノードのコレクションです。
ましょう(ことに注意してください)。グラフのすべてのノードを調べることにより、キューに時間ツリーの葉を入れることができ、頂点に隣接の隣接リストがあると仮定すると、各エッジを2回「トラバース」して、各頂点; 次に、このアルゴリズムは時間かかります。また、非ツリーに対しても機能し、時間を要します。
すべての葉から幅優先検索を並行して実行します。つまり、すべての葉のすべての隣人を訪問し、次にそれぞれの隣人を訪問します。最後に訪問したノードが勝者です。
すべての検索にvisited
フラグを共有させると、頂点に2回アクセスされることはありません。私たちは木を持っているので、すべてのエッジも一度だけ訪問されます。全体として、(ノード数で)線形ランタイムが得られます。