🎁 今すぐ登録するず、オンラむンAIを最倧30分無料で利甚できたす。クレゞットカヌドは䞍芁です。

コサラゞュのアルゎリズム: 匷結合コンポヌネント ガむド

August 22, 2026
コサラゞュの匷結合コンポヌネントのアルゎリズムを盎感、手順、耇雑さ、疑䌌コヌド、䟋、よくある間違い、むンタビュヌの緎習で孊びたす。
匷連結成分に分解された有向グラフ
コサラゞュのアルゎリズム、匷連結成分、グラフ アルゎリズム、コヌディング面接の準備

TL;DR: コサラゞュのアルゎリズムは、2 ぀のパスを䜿甚しお有向グラフ内の匷連結成分を怜出したす深さ優先怜玢パス。たず終了時間を枛らしお頂点を蚘録し、すべおの゚ッゞを転眮し、転眮されたグラフをその順序で探玢したす。転眮が栌玍されるずきの実行時間は O(V + E)、補助蚘憶域は O(V + E) です。

コサラゞュのアルゎリズム: 匷結合コンポヌネント ガむド

コサラゞュの匷結合コンポヌネントのアルゎリズムを盎感、手順、耇雑さ、疑䌌コヌド、䟋、よくある間違い、むンタビュヌの緎習で孊びたす。

YesToTheOffer を詊しおみる

コサラゞュのアルゎリズムずは䜕ですか?

匷連結成分に分解された有向グラフ

Kosaraju のアルゎリズムは、有向グラフを匷接続コンポヌネント (SCC) に分割したす。 1 ぀の SCC 内では、すべおの頂点が他のすべおの頂点に到達できたす。各 SCC を 1 ぀のノヌドに瞮小するず、有向非巡回グラフが生成され、コンポヌネントが䟝存関係の分析、プログラム グラフ、到達可胜性、およびグラフの圧瞮に圹立ちたす。

このアルゎリズムは、深さ優先怜玢の構造的特性を䜿甚したす。元のグラフの終了時間により、転眮されたグラフを探玢するための安党な順序が特定されたす。すべおの゚ッゞを反転するず、コンポヌネント間の゜ヌスずシンクの関係が亀換されるため、頂点が正しい順序で凊理される堎合、1 回の怜玢が割り圓おられおいないコンポヌネントに挏れるこずはありたせん。

2 パス アルゎリズムはどのように機胜したすか?

  1. 蚪問セットず空の着順リストを䜜成したす。
  2. 元のグラフ内の未蚪問の頂点すべおから深さ優先怜玢を実行したす。
  3. すべおの発信隣接頂点が終了した埌に、各頂点を远加したす。
  4. すべおの有向゚ッゞを反転しお転眮を構築したす。
  5. 蚪問枈みセットをクリアしたす。
  6. 逆の終了順序で頂点を凊理したす。
  7. 転眮グラフ内の各 DFS ツリヌは、1 ぀の匷く接続されたコンポヌネントです。

最初の DFS 呌び出しが返されたずきに、頂点をスタックに保存できたす。スタックをポップするず、自然に終了時間が短瞮されたす。グラフが切断されおいる可胜性があるため、䞡方の倖偎のルヌプは頂点 0 のみから開始するのではなく、すべおの頂点を考慮する必芁がありたす。

終了順序を逆転するず SCC が芋぀かるのはなぜですか?

すべおの SCC を 1 ぀のノヌドに圧瞮するこずを想像しおください。結果ずしお埗られる凝瞮グラフには有向サむクルがありたせん。最初の DFS では、関連する終了時間が最も遅いコンポヌネントが、この凝瞮された構造内の゜ヌスのように動䜜したす。グラフを転眮した埌、そのコンポヌネントはシンクのように動䜜するため、そこで開始された DFS は内郚に残りたす。

そのコンポヌネントを削陀するず、次の未割り圓おコンポヌネントの同じ匕数が明らかになりたす。これは面接官が通垞望んでいる蚌明のアむデアです。終了順序によっおコンポヌネントが安党に遞択され、転眮によっお 2 番目のパスが間違った出力境界を越えるのが防止されたす。長い正匏な蚌明を再珟する必芁はありたせんが、䞡方の圹割を説明する必芁がありたす。

時間ず空間の耇雑さは䜕ですか?

各深さ優先怜玢パスでは、すべおの頂点を蚪問し、すべおの゚ッゞを 1 回怜査したす。たた、転眮の構築にも盎線的な時間がかかりたす。したがっお、合蚈時間は O(V + E) ずなりたす。グラフず転眮の䞡方の隣接リストを䜿甚するず、ストレヌゞは O(V + E) に、蚪問状態、終了順序、再垰たたは明瀺的なスタック甚に O(V) を加えたす。

フェヌズ時間远加の目的
初めおのDFSO(V + E)着順を蚘録
移調O(V + E)゚ッゞ方向を逆にする
2番目のDFSO(V + E)コンポヌネントを収集する
合蚈O(V + E)グラフ衚珟の線圢

非垞に深いグラフの堎合、再垰的 DFS は蚀語の呌び出しスタック制限を超える可胜性がありたす。反埩スタックに぀いお蚀及するず、挞近限界を倉曎せずに本番環境を認識しおいるこずがわかりたす。

コサラゞュのアルゎリズムの 2 パス深さ優先怜玢ワヌクフロヌ

面接のために知っおおくべき疑䌌コヌドは䜕ですか?

``テキスト 終了順序 = [] 蚪問枈み = set()

グラフの頂点の堎合: 頂点が蚪問されおいない堎合: dfs_finish(頂点、グラフ、蚪問枈み、finish_order)

transpose = reverse_all_edges(グラフ) 蚪問枈み.clear() コンポヌネント = []

逆方向の頂点の堎合(finish_order): 頂点が蚪問されおいない堎合: コンポヌネント = [] dfs_collect(頂点、転眮、蚪問枈み、コンポヌネント) コンポヌネント.远加(コンポヌネント) 「」

dfs_finish で、近傍を蚪問した埌に頂点を远加したす。 dfs_collectでは、頂点が芋぀かったら远加したす。これら 2 ぀の責任は分けおおいおください。最初のパスで preorder を䜿甚するこずはよくある゚ラヌです。

コサラゞュの実装を壊す䞀般的な間違いはどれですか?

最も䞀般的な間違いは、終了順序ではなく怜出順序を蚘録する、2 番目のパスの順序を逆にするのを忘れる、䞀郚の゚ッゞのみを反転する、蚪問枈みの状態をクリアせずに再利甚する、孀立たたは切断された頂点をスキップするなどです。もう 1 ぀の間違いは、無向グラフを SCC が同じように意味があるかのように扱うこずです。接続されたコンポヌネントは、より単玔な抂念です。

単䞀の頂点、孀立した頂点、1 ぀の有向サむクル、䞀方向チェヌン、1 ぀の゚ッゞで結合された 2 ぀のサむクル、自己ルヌプ、および切断されたグラフをテストしたす。有効な DFS 走査順序が異なるず、コンポヌネントたたは頂点のリストが異なる可胜性があるため、コンポヌネントの出力順序に䟝存するのではなく、パヌティションを怜蚌しおください。

コサラゞュは Tarjan のアルゎリズムずどう比范したすか?

どちらのアルゎリズムも O(V + E) で SCC を芋぀けたす。 Kosaraju は 2 ぀の DFS パスを䜿甚し、通垞は転眮されたグラフを保存するため、掚論ず実装が簡単になりたす。 Tarjan は、怜出むンデックス、䜎リンク倀、およびスタックを備えた 1 ぀の DFS を䜿甚したす。明瀺的な転眮を回避したすが、より倚くの状態を正しく維持できたす。

面接では、制玄がある堎合を陀き、説明しお確実に実装できるアルゎリズムを遞択しおください。面接官が 1 回のパスたたは移調なしを芁求した堎合は、Tarjan の方が適しおいる可胜性がありたす。明確さず盎接的な蚌明が優先される堎合は、倚くの堎合、Kosaraju が優れた遞択肢ずなりたす。

AI はグラフ アルゎリズムの実践を責任を持っおサポヌトするにはどうすればよいですか?

AI は、小さな反䟋を生成し、DFS 状態をトレヌスし、実装を比范し、耇雑さの説明に異議を唱えるこずができたす。コヌディング支揎は順序付けや蚪問状態のバグを芋぀けるのに圹立ちたすが、トランスクリプトのレビュヌは蚌明のアむデアを明確に説明したかどうかを瀺すこずができたす。

垞に少なくずも 1 ぀のグラフを自分で描画およびトレヌスし、テストを実行しお、生成されたクレヌムを怜蚌しおください。評䟡ルヌルに埓い、犁止されおいる支揎を䜿甚しないでください。 YesToTheOffer は、コヌディングの準備、蚱可されたリアルタむム掚論、個人的なメモ、および面接埌のレビュヌをサポヌトしたす。

よくある質問

FAQ

コサラゞュのアルゎリズムは䜕に䜿甚されたすか?

Kosaraju のアルゎリズムは、有向グラフ内の匷く接続されたコンポヌネントを芋぀けたす。 SCC は、各コンポヌネントを 1 ぀のノヌドに瞮小しお有向非巡回圧瞮グラフを生成できるため、到達可胜性ず䟝存関係の構造を簡玠化するのに圹立ちたす。

なぜ Kosaraju のアルゎリズムには 2 ぀の DFS パスが必芁なのでしょうか?

最初のパスでは、次に探玢しおも安党なコンポヌネントを特定する終了時間の順序を蚈算したす。 2 番目のパスは、転眮されたグラフ䞊で実行されたす。ここでは、゚ッゞが反転されおいるため、怜玢が別の未割り圓おコンポヌネントに゚スケヌプされるのを防ぎたす。

コサラゞュのアルゎリズムの耇雑さはどれくらいですか?

時間蚈算量は O(V + E) です。隣接リスト グラフでは、2 ぀の DFS パスず゚ッゞ反転がそれぞれ線圢です。元のグラフず転眮されたグラフの保存された隣接リストは、远加の O(V) トラバヌサル状態ずずもに O(V + E) スペヌスを䜿甚したす。

コンポヌネントの出力順序は重芁ですか?

通垞はいいえ。隣接関係の順序が異なるず、同じ有効なパヌティションを䜜成しながら、DFS トラバヌサルず頂点たたはコンポヌネントの順序が倉曎される可胜性がありたす。問題で明瀺的に特定の順序付けが必芁な堎合を陀き、テストではコンポヌネントのメンバヌシップをセットずしお比范する必芁がありたす。

Tarjan のアルゎリズムは Kosaraju のアルゎリズムより優れおいたすか?

どちらが䞀般的に優れおいるずいうわけではありたせん。どちらも O(V + E) で実行されたす。 Tarjan は 1 ぀の DFS を䜿甚し、明瀺的な転眮は䜿甚したせんが、䜎リンク状態を維持したす。 Kosaraju は抂念的に単玔な 2 ぀のパスを䜿甚し、通垞は反転したグラフを保存したす。制玄ず実装の信頌性に基づいお遞択しおください。

緎習を再珟可胜なシステムに倉える

蚌拠に基づいた緎習蚈画を立お、蚱可されおいる堎合は責任あるサポヌトを利甚し、新鮮なうちに䌚話を芋盎したす。

実践を反埩可胜なシステムに倉える

独自の蚌拠を甚意しお、すべおの回答をより明確なコンテキストで確認したす。

YesToTheOffer を詊しおください
コサラゞュのアルゎリズム: SCC むンタビュヌ ガむド | yestotheoffer