일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- NarwalFreo
- 구글 앱 엔진
- 인공지능
- Google App Engine
- Friendship
- 고려대학교
- Neural Network
- Bidirectional Associative Memory
- hopfield network
- 빅데이터
- 멤버십
- 패턴 인식
- Python
- 파이썬
- 삼성소프트웨어멤버십
- 증강현실
- 물걸레로봇청소기추천
- 갤럭시탭S8울트라
- 가상화
- 동아리
- 신경망
- 삼성전자 소프트웨어멤버십 SSM
- 신경회로망
- 물걸레자동세척로봇청소기
- SSM
- 하이퍼바이저
- 나르왈프레오
- 삼성
- BAM
- 패턴인식
- Today
- Total
정보공간_1
[6기 강남 조유석] Network Flow - Ford-Fulkerson Algorithm 본문
[6기 강남 조유석] Network Flow - Ford-Fulkerson Algorithm
알 수 없는 사용자 2014. 11. 2. 17:44안녕하세요. 강남멤버십 23-1기 조유석입니다.
이번 포스팅에서는 간선이 용량을 갖는 그래프에서 두 정점 사이에 얼마나 많은 유량을 보낼 수 있는지를 계산하는 문제인 Network Flow 를 해결하는 기초적인 알고리즘인 Ford-Fulkerson Algorithm 에 대해 알아보겠습니다.
Network Flow
Network Flow 란 각 간선에 Capacity(용량) 라는 추가 속성이 존재하는 방향 그래프를 말합니다.
정점 u에서 v로 가는 간선의 Capacity 를 c(u, v), 실제 흐르는 유량을 f(u, v) 라고 쓸 때, Network Flow 는 항상 다음 세 가지 속성을 만족해야 합니다.
1. Capacity Constraint(용량 제한 속성):
각 간선의 유량은 해당 간선의 용량을 초과할 수 없습니다.
2. Skew Symmetry(유량의 대칭성):
이 속성은 두 정점이 서로 상대에게 보내 주는 것은 의미가 없기 때문에 성립합니다.
① 에서 점선으로 표시된 간선으로 1만큼을 보냄으로써 ② 를 얻을 수 있습니다. 1을 주고 1을 받는 것이기 때문에 서로 상쇄해서 없애 버리면 결과적으로 ③을 얻을 수 있고, 여기에서도 Network Flow의 세 속성은 그대로 성립합니다.
3. Flow Conservation(유량의 보존):
각 정점에 들어오는 유량과 나가는 유량은 정확히 같아야 합니다.
Ford-Fulkerson Algorithm
Network Flow 문제를 해결하는 가장 기초적인 방법으로 Ford-Fulkerson Algorithm 이 있습니다. Ford-Fulkerson Algorithm 은 최초로 고안된 Network Flow 알고리즘으로 그 개념과 구현이 비교적 간단합니다. 그 과정은 아래와 같습니다.
- Network Flow 의 모든 간선의 유량을 0으로 두고 시작합니다.
- Residual Capacity(잔여 용량) 가 남은 간선들만을 이용해 BFS를 수행해 Augmenting Path(증가 경로) 를 찾습니다.(위 과정의 굵게 표시된 간선이 BFS를 이용해 찾은 Augmenting Path 입니다.)
- Augmenting Path를 통해 흘려보낼 수 있는 유량의 최대량은, 포함된 간선의 Residual Capacity 중 최소로 결정됩니다.
- 각 간선의 유량을 갱신할 때, 유량의 대칭성을 유지하기 위해 한 방향의 유량을 늘리면 다른 방향의 유량은 줄어듭니다.(위 과정의 푸른색으로 표시된 유량을 확인하면 됩니다.)
- Ford-Fulkerson Algorithm 은 이와 같은 Augmenting Path 가 더 이상 존재 하지 않을 때 까지 반복합니다.
Network Flow 는 교통량, 석유량 등 현실 세계에서 자주 볼 수 있는 문제일 뿐만 아니라 그래프와 별 상관이 없어 보이는 다양한 최적화 문제들을 푸는데도 이용할 수 있습니다.
이상으로 Network Flow 와 Ford-Fulkerson Algorithm 에 대해 알아보았습니다.
감사합니다.
Reference
- ‘프로그래밍 대회에서 배우는 알고리즘 문제해결 전략’ - 구종만 저
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[6기 강남 송태현] Android Framework PowerManager 분석 (0) | 2014.11.02 |
---|---|
[6기 강북 전영진] 리눅스 커널 심층 분석 #3 (0) | 2014.11.02 |
[6기 대전 민창기] Control System #4 (0) | 2014.11.02 |
[6기 대전 민창기] Control System #3 (0) | 2014.11.02 |
[6기 강북 윤덕진]리눅스 쉘 스크립트 프로그래밍 #2 (0) | 2014.10.31 |