強連結成分分解

これはステージング環境です。5 秒後に自動的に本番環境 (https://noshi91.github.io/algorithm-encyclopedia) にリダイレクトされます。リダイレクトを抑止したい場合は #noredirect を付けた URL /algorithm-encyclopedia/strongly-connected-components#noredirect を利用してください。
name
強連結成分分解
short description
有向グラフ G=(V,E)G = (V, E) の強連結成分 CVC \subseteq V は、全ての (u,v)C2(u, v) \in C^2 について uu から vv へ到達可能な極大集合である。GG の全ての強連結成分は VV の分割になり、これを強連結成分分解と呼ぶ。空間計算量、時間計算量ともに O(V+E)O(\lvert V \rvert + \lvert E \rvert) で構成することができる。
input
有向グラフ G=(V,E)G = (V, E)
output
G=(V,E)G = (V, E) の強連結成分分解
time complexity
O(V+E)O(\lvert V \rvert + \lvert E \rvert)
space complexity
O(V+E)O(\lvert V \rvert + \lvert E \rvert)

概要

有向グラフ G=(V,E)G = (V, E) の強連結成分 CVC \subseteq V は、全ての (u,v)C2(u, v) \in C^2 について uu から vv へ到達可能な極大集合である。GG の全ての強連結成分は VV の分割になり、これを強連結成分分解と呼ぶ。空間計算量、時間計算量ともに O(V+E)O(\lvert V \rvert + \lvert E \rvert) で構成することができる。実際に構成するアルゴリズムとして、GGGG の転置グラフ G=(V,E), E={(u,v):(v,u)E}G ^ {\top} = (V, E ^ {\top}),\ E ^ {\top} = \lbrace (u,v) : (v, u) \in E \rbrace を深さ優先探索する方法1と、lowlinkに着目して、構成する方法2がある。 接続する2頂点が GGの同じ強連結成分に属する全ての辺を縮約することで得られるグラフが有向非巡回グラフであるという性質がある。

注釈