일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Python
- 빅데이터
- 동아리
- 신경망
- 삼성
- Friendship
- 하이퍼바이저
- NarwalFreo
- 갤럭시탭S8울트라
- 신경회로망
- 물걸레로봇청소기추천
- 패턴 인식
- 파이썬
- 가상화
- Google App Engine
- 삼성소프트웨어멤버십
- Bidirectional Associative Memory
- 고려대학교
- 구글 앱 엔진
- 멤버십
- SSM
- 패턴인식
- 증강현실
- Neural Network
- BAM
- 인공지능
- 나르왈프레오
- 삼성전자 소프트웨어멤버십 SSM
- hopfield network
- 물걸레자동세척로봇청소기
- Today
- Total
정보공간_1
[6기 강남 조유석] Strongly Connected Component 본문
[6기 강남 조유석] Strongly Connected Component
알 수 없는 사용자 2014. 12. 9. 04:04안녕하세요. 강남멤버십 23-1기 조유석입니다.
이번 포스팅에서는 Strongly Connected Component 에 대해 알아보겠습니다.
Strongly Connected Component
Directed Graph의 정점의 부분집합 S가 「임의의 두 정점 u, v를 가지는 경우 u에서 v에 도달할 수 있다」라는 조건에 만족하고 있을 때 S는 강한 연결이라고 말할 수 있습니다. 정점의 강한 연결인 집합 S에 다른 어떤 정점 집합을 더해도 강한 연결이 될 수 없을 때 S를 Strongly Connected Component(강한 연결 성분)이라고 말합니다. 어떠한 Directed Graph도 몇 개의 Strongly Connected Componet의 공통부분을 가지지 않는 합집합으로 분해할 수 있습니다. 이것을 강한 연결 성분 분해라고 부릅니다. Strongly Connected Component 를 1개의 정점으로 변형하는 것으로 DAG(Directed Acyclic Graph, 닫힌 경로를 가지지 않는 Directed Graph)가 됩니다.
강한 연결 성분 분해
강한 연결 성분 분해는 2회의 간단한 DFS에 의해 분해할 수 있습니다. 1번째 DFS에서는 적당한 정점에서 시작해, 아직 통과하지 않은 정점을 찾으면서 post order로 번호를 붙입니다. 아직 통과하지 않은 정점이 있는 경우에는 다시 그곳에서 부터 시작하는 것을 반복합니다.
2번째 DFS에서는 그래프의 모든 변을 역방향으로 해서, 번호가 제일 큰 곳에서 부터 DFS를 시작합니다. 통과할 수 있었던 정점의 집합이 1개의 Strongly Connected Component(강한 연결 성분)이 됩니다. 그 후 통과하지 않는 정점이 있는 경우는, 그 중에 번호가 제일 큰 곳에서 다시 DFS를 반복합니다.
Strongly Connected Component를 1개의 정점으로 변형하면 DAG가 된다 라는 것은 앞에서 설명했습니다. 이 때 번호가 제일 큰 정점이라는 것은 DAG의 선두에 Strongly Connected Component에 속한다는 것을 알 수 있습니다. 변을 역방향으로 하면, 이 선두의 Strongly Connected Component로부터 밖으로 나갈 수 없습니다. Strongly Connected Component 중에서는 변을 역방향으로 해도 도달하는 것이 가능한 정점의 집합은 변하지 않으므로, 2번째의 DFS에서 Strongly Connected Component의 모든 정점에 도달할 수 있다는 것을 알 수 있습니다.
이 알고리즘은 DFS를 2번 한 것뿐이므로 계산량이 O(|V|+|E|)가 됩니다.
이상으로 Strongly Connected Component에 대해 알아보았습니다.
감사합니다.
Reference
- ‘프로그래밍 콘테스트 챌린징’ - Takuya Akiba, Yoichi Iwata, Masatoshi Kitagawa 저
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[6기 수원 정재윤] Hardware 기초#3 _ 이것만 따라하면 나도 레이아웃 만든다. (0) | 2014.12.10 |
---|---|
[6기 신촌 김윤상] R 언어 #3 - 간단한 예제를 통한 단순회귀분석 (0) | 2014.12.10 |
[6기 수원 조성찬] Arm cortex-M3 가독성있게 코딩합시다. (0) | 2014.12.08 |
[6기 수원 조성찬] Arm coretex - M3 시작해보기(LED ON/OFF) 2 (1) | 2014.12.08 |
[6기 수원 조성찬] Arm cortex-M3 시작해 보기(LED ON/OFF) 1 (1) | 2014.12.08 |