有向グラフの強く接続されたコンポーネントアルゴリズムの正確性


8

私は有向グラフ強連結成分を見つけるためのアルゴリズムについて読んでいます。2つのDFS検索を考慮し、2番目のステップは元のグラフG Tを転置します。G=(V,E)GT

アルゴリズムは次のとおりです。

  1. DFSを実行し(任意の開始頂点から開始)、すべての頂点の終了時間を追跡します。G
  2. 転置を計算し、
  3. でDFSを実行し、最後の終了時刻の頂点から開始して、その頂点をルートとするツリーを形成します。ツリーが完成したら、次の最新の終了時刻で未訪問の頂点に移動し、DFSを使用して別のツリーを形成し、G Tのすべての頂点が訪問されるまで繰り返します。GTGT
  4. 2番目のDFSによって形成された各ツリーの頂点を、個別に強く接続されたコンポーネントとして出力します。

私の質問は:

  1. 転置計算のこの中間ステップの背後にある直感は何ですか?

回答:


10

A

A[i,j]=1AT[j,i]=1

グラフに関しては、これは

uGvvGTu

GTG

あなたが見ているアルゴリズムコサラジュのアルゴリズムです。「終了時間」の概念に注意してください。ノードにアクセスする時間ではなく、検索がノードから到達可能なサブグラフをトラバースしたときです。ウィキペディアはスタックを使用してこれを管理することを提案していますが、これは良い考えだと思います。

GTx

  • Gxx
  • x
  • GGTxGTxGTxGT

2

私の理解:

DAGグラフでDFSを実行して終了時間を追跡する場合、保証できる唯一のことは、シンクノードが最高の終了時間を取得しないことです[1]。ただし、同時に、最短の終了時間がグラフのいずれかのコンポーネントに表示される場合があります。したがって、最短の仕上げ時間は役に立たなくなります。

基本的に、事実[1]元のグラフでも役に立ちませんが、転置グラフでは非常に役立ちます。転置すると、このステートメントは次のようになります。

転置グラフでは、非転置グラフのシンクであったノードが常に最高の終了時間を取得します。

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