{{위키데이터 속성 추적}}
[[파일:Scc-1.svg|섬네일|그래프에 강한 연결 요소를 표시한 모습]]
[[유향 그래프]]에서 모든 정점이 모든 다른 정점에 대해 [[도달 가능성|도달 가능]]한 경우, 그래프는 '''강하게 연결되었다 '''또는 '''상호연결되었다'''라고 한다. '''강한 연결 요소''' 또는 '''상호연결요소'''는 부분 그래프의 모든 정점이 강하게 연결된 임의의 유향그래프의 [[집합의 분할|분할]]이다. 그래프가 강하게 연결되었는지와 그래프에서 강한 연결 요소를 찾는것은 [[시간 복잡도|선형 시간]](Θ(V+E))에 가능하다 .

== 정의 ==
[[유향 그래프]]에서 그래프 상의 각 정점 쌍에 사이에 [[경로 (그래프 이론)|경로]]가 존재하는 경우 그래프는 '''강하게 연결되었다'''라고 한다. 이것은 한쌍의 정점 중 첫번째 정점에서 두번째 정점으로의 경로가 존재하고, 두번째 정점에서 첫번째 정점으로 가는 다른 경로가 존재한다는 것이다. 유향 그래프 ''G'' 가 강하게 연결되지 않은 경우에도 한 쌍의 정점 u 와 v에 대해 그들 사이에 서로에게 가는 경로가 있으면 정점 u 와 v는 강하게 연결되었다고 할 수 있다.

강하게 연결된 정점 쌍에서 경로의 존재에 대한 [[이항관계]]는 [[동치관계|동치 관계]]이며, [[동치류]]의 [[유도된 부분 그래프]]를 '''강한 연결 요소'''라고 부른다.  다르게 표현하면, 유향 그래프 ''G ''의 '''강한 연결 요소'''는 강하게 연결된 부분그래프이고, 이러한 속성을 가지는 최대 그래프이다. 강하게 연결되는 특성을 깨뜨리는 정점과 간선 외에는 ''G ''에서 부분 그래프에 포함될 수 있는 추가적인 간선 또는 정점이 없어야 한다.  강한 연결 요소의 모임은 G의 정점집합의 분할을 형성한다.
[[파일:Graph_Condensation.svg|섬네일|파란색 유향 그래프를 [[정점 응축|응축]]시킨 노란색 [[비순환 유향 그래프]].   노란색 그래프는 파란색 그래프의 강한 연결 요소를 응축시켜 하나의 노란색 정점으로 함으로써 만들어졌다. ]]
강한 연결요소들을 하나의 정점으로 [[정점 응축|응축]]시켰을 때 결과가 되는 그래프는 [[비순환 유향 그래프]]이며, 이를 ''G ''의 '''응축'''이라고 한다. 유향 그래프는 강하게 연결된 부분 그래프가 없을 때만 순환이 없을 수 있는데, 왜냐하면 유향 순환은 강하게 연결되어있고 모든 강한 연결 요소는 적어도 하나의 유향 순환을 포함하기 때문이다.

== 알고리즘 ==

=== DFS 기반 선형 시간 알고리즘 ===
[[깊이 우선 탐색]]을 기반으로 하는 몇가지 알고리즘들은 [[시간 복잡도|선형 시간]]에 강한 연결 요소들을 계산할 수 있다.

* [[코사라주의 알고리즘]]은 두번의 [[깊이 우선 탐색]]을 거친다. 첫번째 탐색은 원본 그래프에서 두번째 깊이 우선 탐색의 외부 루프에서 방문된 점들을 테스트하고 방문되지 않은 점들을 재귀적으로 방문하는 정점의 순서를 정하는데 사용된다. 두 번째 깊이 우선 탐색은 원본 그래프의 [[역방향 그래프]]에서 진행되며, 재귀적 탐색으로 새로운 강한 연결 요소들을 찾는다.<ref>[//en.wikipedia.org/wiki/Thomas_H._Cormen Thomas H. Cormen], [//en.wikipedia.org/wiki/Charles_E._Leiserson Charles E. Leiserson], [//en.wikipedia.org/wiki/Ronald_L._Rivest Ronald L. Rivest], and [//en.wikipedia.org/wiki/Clifford_Stein Clifford Stein]. ''[//en.wikipedia.org/wiki/Introduction_to_Algorithms Introduction to Algorithms]'', Second Edition. MIT Press and McGraw-Hill, 2001. {{isbn|0-262-03293-7}}. Section 22.5, pp.&nbsp;552–557.</ref> 이 알고리즘은 1978년에 이 알고리즘에 대해 처음 설명한 (그러나 결과를 출판하지 않은) [[삼바시바 코사라주]]의 이름을 따서 붙여졌지만, 1981년 [[미샤 샤리르]]에 의해 출판되었다.<ref>[//en.wikipedia.org/wiki/Micha_Sharir Micha Sharir]. A strong connectivity algorithm and its applications to data flow analysis. ''Computers and Mathematics with Applications'' 7(1):67–72, 1981.</ref>
* [[타잔의 강한 연결 요소 알고리즘]]은 1972년에 [[로버트 타잔]]에 의해 출판되었으며,<ref>{{인용|first=R. E.|last=Tarjan|authorlink=Robert Tarjan|title=Depth-first search and linear graph algorithms|journal=[[SIAM Journal on Computing]]|volume=1|year=1972|issue=2|pages=146–160|doi=10.1137/0201010}}</ref> 한번의 깊이 우선 탐색을 거친다. 유지 [[스택]]의 정점을 탐구되었으로 검색을 하지만 아직 지정되지 않는 구성 요소 및 계산"낮은 숫자를"각각의 정점(인덱스 번호의 조상이 닿을 수 있는 하나의 단계에서의 자손이 정점)하기 위해 사용되는 결정할 때 정점의 설정해야 팝 스택으로 새로운 구성 요소입니다.
* [[경로기반 강한 요소 알고리즘]]은 타잔의 알고리즘과 유사하게 깊이 우선 탐색을 하지만 두개의 스택을 사용한다. 스택 중 하나는 요소들에 추가되지 않은 정점의 경로를 기억하는데 사용되고, 다른 스택은 깊이 우선 탐색 트리의 현재 경로를 기억하는데 사용된다. 이 알고리즘의 선형시간 풀이는 1976년 [[에츠허르 데이크스트라]]에 의해 출판되었다.<ref>{{인용|last=Dijkstra|first=Edsger|author-link=Edsger Dijkstra|location=NJ|at=Ch.&nbsp;25|publisher=Prentice Hall|title=A Discipline of Programming|year=1976}}.</ref>

코사라주의 알고리즘은 개념적으로 간단하지만, 타잔의 알고리즘과 경로기반 알고리즘이 깊이 우선 탐색을 한번만 필요로 하는 것에 비해 두번의 탐색을 필요로 한다.

=== 도달 가능성 기반 알고리즘 ===
이전 선형 시간 알고리즘들은 일반적으로 병렬화하기 어려운 [[깊이 우선 탐색]]을 기반으로 한다. 피셔 등은<ref name="Fleischer">Fleischer, Lisa K; Hendrickson, Bruce; and Pinar, Ali. [http://www.sandia.gov/~apinar/papers/irreg00.pdf On identifying strongly connected components in parallel]. IPDPS 2000.</ref> 2000년에 [[도달 가능성]] 쿼리를 기반으로 한 [[분할 정복 알고리즘|분할 정복]] 접근 방식을 제안하였고, 이러한 알고리즘은 일반적으로 '''도달 가능성 기반 강한 연결 요소 알고리즘'''으로 불리게 되었다. 이러한 접근의 아이디어는 무작위적으로 피봇 정점을 뽑고, 이 정점에 대해 앞뒤 방향으로 도달 가능성 쿼리를 적용하는 것이다. 두개의 쿼리는 정점들의 집합을 서로에게 도달 가능한 것, 한 방향으로만 도달 가능한것(2개), 도달 가능하지 않은 것의 4개의 부분 집합으로 분할한다. 이렇게 강한 연결 요소가 부분 집합중 하나에 포함되어에 함을 보일 수 있다. 각 검색들을 통해 도출한 정점 부분 집합은 강한 연결 요소를 형성하고, 알고리즘은 다른 3개의 부분집합에 대해서 재귀적으로 해를 구하게 된다.

예상되는 이 알고리즘의 순차 실행 시간은 기존의 알고리즘에 O(log ''n'')의 요소가 추가된 O(''n'' log ''n'')이다.  그러나 도달 가능성 쿼리는 병렬화 되기가 더 쉬우며(예를 들어 [[너비 우선 탐색]]를 통하여, 그리고 그래프의 지름이 작으면 빨라질 수 있다는 점에서), 분할 정복 과정에서 부분 문제들 간의 독립성에 의해 이 알고리즘은 병렬성을 갖게 된다.
이 알고리즘을 실세계(real-world) 그래프에서 잘 수행된다.<ref name="hong2013fast">Hong, Sungpack; Rodia, Nicole C; and Olukotun, Kunle. [https://ppl.stanford.edu/papers/sc13-hong.pdf On fast parallel detection of strongly connected components (SCC) in small-world graphs] {{웨이백|url=https://ppl.stanford.edu/papers/sc13-hong.pdf# |date=20170808195853 }}. SC 2013.</ref> 그러나 병렬성으로 인한 이론적인 이득은 없다 (그래프에 간선이 없는 경우를 고려해 보면 ,알고리즘은 O(''n'')단계의 재귀를 필요로 한다).

Blelloch 등은 2016년에 무작위적인 순서의 도달 가능성 쿼리는 여전히 O(n log n)의 비용을 갖는다는 것을 보였다.<ref name="Parallel">Blelloch, Guy; Gu, Yan; Shun, Julian; and Sun, Yihan. [http://www.cs.cmu.edu/~ygu1/paper/SPAA16/Incremental.pdf Parallelism in Randomized Incremental Algorithms]. SPAA 2016. doi:10.1145/2935764.2935766.</ref> 또한, 접두사 두배의 방식의(즉, 1, 2, 4, 8 쿼리) 쿼리들이 일괄처리될 수 있고, 한 라운드에서 동시에 실행된다. 이 알고리즘의 총 [[병렬 알고리즘의 분석|범위]]는 log<sub>2</sub> ''n'' 개의 연결 쿼리들인데, 이것은 도달 가능성 기반 접근법을 사용하여 달성 할 수 있는 최적의 병렬 처리 일 것이다.

== 강한 연결요소의 활용 ==
강한 연결 요소를 찾기 위한 알고리즘은 [[충족 가능성 문제|2-충족 가능성]](변수 쌍의 값에 대한 제약 조건이있는 부울 변수의 시스템) 문제를 해결하는데 사용될 수 있다.  {{하버드 인용 본문|Aspvall|Plass|Tarjan|1979}}은 ''v''와 ''v''의 대칭 요소가 인스턴스의 [[함축 그래프]]의 같은 강한 연결 요소에 포함된 변수 ''v''가 존재할 때만 [[충족 가능성 문제|2-충족 가능성]] 인스턴스가 충족 가능하지 않다는 것을 밝혀내었다. <ref>{{인용|last1=Aspvall|first1=Bengt|last2=Plass|first2=Michael F.|authorlink3=Robert Tarjan|last3=Tarjan|first3=Robert E.|title=A linear-time algorithm for testing the truth of certain quantified boolean formulas|journal=Information Processing Letters|volume=8|issue=3|pages=121–123|year=1979|doi=10.1016/0020-0190(79)90002-4}}.</ref>

강하게 연결된 요소들은 또한 [[둘메이지-멘델슨 분해]]를 계산하는데 사용될 수 있는데, [[이분 그래프]]의 간선들의 분류는, 그래프에서 그들이 [[부합 (그래프 이론)|완벽 부합]]의 부분이 될 수 있는지에 따르기 때문이다.<ref>{{인용|title=Coverings of bipartite graphs |first=A. L. |last=Dulmage |authorlink2=Nathan Mendelsohn |first2=N. S. |last2=Mendelsohn |lastauthoramp=yes |journal=Can. J. Math. |year=1958 |volume=10 |pages=517–534 |doi=10.4153/cjm-1958-052-0}}.</ref>

== 관련된 결과들 ==
유향 그래프는 강하게 연결되어 있는 경우에만 [[Ear decomposition|귀 분해]]를 갖는데, 간선들의 분할은 유향 경로와 순환으로 이루어진 [[수열|그래프열]]이 된다. 이때 첫번째 부분 그래프는 순환이고, 다음에 나오는 부분 그래프는 이전의 부분 그래프와 하나의 정점을 공유하는 순환이거나 이전의 부분 그래프와 두개의 끝점을 공유하는 경로이다.

[[로빈스의 정리]]에 따라 무향 그래프는 강하게 연결된 것으로 [[방향 부여]]될 수 있으며, 이것은 항상 [[K-간선 연결 그래프|2 간선 연결 그래프]]이다. 이 결과를 증명하기 위한 한가지 방법은 하나의 기반이 되는 무향 그래프의 귀 분해를 찾고 각각의 귀마다 일정하게 방향을 부여하는 것이다.<ref>{{인용|last=Robbins|first=H. E.|author-link=Herbert Robbins|journal=[[American Mathematical Monthly]]|jstor=2303897|pages=281–283|title=A theorem on graphs, with an application to a problem on traffic control|volume=46|year=1939|doi=10.2307/2303897}}.</ref>

== 같이 보기 ==
* [[클릭 (그래프 이론)]]
* [[연결 요소]]
* [[Modular decomposition|모듈 분해]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* [http://code.google.com/p/jbpt/ Java를 통한 강한 연결 구성 요소의 계산 구현], jBPT 라이브러리로 구현함(StronglyConnectedComponents 클래스).
* [http://www.geeksforgeeks.org/tarjan-algorithm-find-strongly-connected-components/ C++을 통한 강한 연결 구성 요소의 구현]

[[분류:유향 그래프]]