与えられた木から、葉までの最小距離を最大にする頂点を見つけます


7

木を形成するグラフが与えられた場合、葉までの最小距離を最大にする頂点を見つけることに興味があります。

この問題は以前に研究されたと思います。この問題の名前またはそれを解決するためのアルゴリズムを知っている人はいますか?


3
グラフの中心を探しますか?木がある場合、中心は常に単一の頂点またはエッジです。それは線形時間で見つけることができます。
Juho 2013

3
@Juho:で偏心ことに注意から任意のノードの最大距離であり、。OPは、葉との最小距離について尋ねています。これは、多くの場合異なります。したがって、偏心が最小の頂点を扱うグラフの中心が適切な概念であることは明らかではありません。vv
Niel de Beaudrap 2013

@NieldeBeaudrapはい、そうです。
Juho

回答:


5

葉から最大距離の頂点を見つけるには、多くの開始点、つまり葉から始まる幅優先検索を実行できます。BFSは検索のソースから可能な最短のパスで各ノードを訪問するため、最も近い葉までの距離を各ノードに簡単に帰属できます。

  • すべてのリーフにわたるのペアのコレクションをキューに挿入し、を記録し。(,0)max=0

  • キューが空になるまで以下を繰り返します。

    1. キューからペアポップします。もし、インサート最大距離要素のコレクションです。(v,d)d=maxv

    2. 訪問されていない隣接するノードがある場合、そのような各隣接ペアにペアをプッシュし、訪問されたものとしてマークします。そのようながある場合は、最大距離要素のコレクションを空にし(空でない場合)、ます。v(w,d+1)wwmax=d+1

結果は、すべての葉から少なくとも距離にあるノードのコレクションです。max

ましょう(ことに注意してください)。グラフのすべてのノードを調べることにより、キューに時間ツリーの葉を入れることができ、頂点に隣接の隣接リストがあると仮定すると、各エッジを2回「トラバース」して、各頂点; 次に、このアルゴリズムは時間かかります。また、非ツリーに対しても機能し、時間を要します。n=|V|m=|E|=n1O(n)O(n+m)=O(n)O(n+m)


4

すべての葉から幅優先検索を並行して実行します。つまり、すべての葉のすべての隣人を訪問し、次にそれぞれの隣人を訪問します。最後に訪問したノードが勝者です。

すべての検索にvisitedフラグを共有させると、頂点に2回アクセスされることはありません。私たちは木を持っているので、すべてのエッジも一度だけ訪問されます。全体として、(ノード数で)線形ランタイムが得られます。


エラーが発生しました。
Niel de Beaudrap 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.