Upload
hongjun-jang
View
223
Download
0
Embed Size (px)
Citation preview
Network Flow고려대학교 장홍준
Network Flow Problem
• 네트워크 최적화 문제의 한 종류
• 예시 : 부산에서 서울로 가는 고속도로를 생각하자.
각 고속도로 구간마다 시간 당 지나갈 수 있는 차량이 제한.
부산에서 서울로 단위 시간에 서울로 갈 수 있는 차량의 최댓값?
• 펌프, 배수관, 물의 최대량
유량 네트워크(Flow Network)
유량 네트워크(Flow Network)
• G=(V, E)
• 간선 (u, v)∊ E 의 음이 아닌 용량 c(u, v)≥0 을 갖는 방향 그래프
• 유량 네트워크에서는 두 정점을 출발지 s와 도착지 t로 구분
• 최대 유량 문제s와 t를 가지는 유량 네트워크 G가 주어졌을 때의 최대 유량
유량 네트워크(Flow Network)
• G(V, E) : 정점 집합 V와 간선 집합 E 그래프
• c(u, v) : u와 v 사이의 용량(capacity)
• f(u, v) : u와 v 사이의 유량(flow)
Augmenting path
• 시작점에서 도착점에 이르는 한 경로에 대해 흘릴 수 있는 최대 유량
Augmenting path
• Step 1 : 시작점의 용량을 무한대(아주 크게) 초기화
• Step 2
1) 방문하지 않은 정점이 없다면 종료
2) 방문하지 않은 정점들 중 최대용량을 가진 정점(X)을 선택
• Step 3 : X에서 갈 수 있는 정점들에 대한 정보 갱신하고 Step 2를 반복.
갱신 : X → Y에 대해 cap(Y) = min(cap(X), cap(X → Y))
Residual network를 위해 부모 정점에 대한 정보도 별도로 저장. Parent(Y) = X.
Augmenting path
• Step 4 : 시작점에서 도착점에 이르는 경로가 있다면
경로상의 용량 최솟값을 f라 하면,
1) 경로의 정방향에 유량 f를 흘림.
2) 경로의 역방향에 용량 f를 추가.
• P, Parent(P)에 대해
1) Flow( Parent(P) → P ) += f
2) Cap( P → Parent(P) ) += f
Augmenting path
Augmenting path
Augmenting path
Residual Network
• (Residual) = (Capacity) – (Flow) : 추가적으로 흐를 수 있는 양
• Augmenting path에서의 유량을 f라 하면,
역경로에 대해 Capacity를 f만큼 할당해주면 된다.
직관적으로 생각하면, 현재의 확대 경로(A) 생성 이후에추가적인 확대 경로(B)에 대해서 A의 유량을 줄여야 전체 유량이 최적.
한 간선에 쓸데없이 많은 유량을 흘림으로 인해 다른 path를 막아버리는 사태를 방지.
Network Flow Algorithm
• Ford-Fulkerson Algorithm
• Edmonds-Karp Algorithm
• Dinic’s Algorithm
Ford-Fulkerson Algorithm
• 1. Finding a flow path
Source에서 Sink로 DFS를 수행한다. (BFS는 Edmond-Karp Algorithm)
1) 방문 조건 : (용량 – 유량)이 양수 & 방문한 적 없는 정점
2) 각 경로에 대해 (용량 – 유량) 최솟값이 흐를 수 있는 유량
• 2. Flow augmenting path
Sink에 도착한 경로 중 하나에 대해 min({용량 – 유량}) = X
1) 정방향으로 유량 X를 흘려줌.
2) 역방향으로 용량 X를 추가함.
Ford-Fulkerson Algorithm
Ford-Fulkerson Algorithm
Ford-Fulkerson Algorithm
Ford-Fulkerson Algorithm
Ford-Fulkerson Algorithm
Ford-Fulkerson Algorithm
Ford-Fulkerson Algorithm
Ford-Fulkerson Algorithm
Ford-Fulkerson Algorithm
Ford-Fulkerson Algorithm
C++ Code
Ford-Fulkerson Algorithm
• O(𝐸𝑓)
• 𝐸 : the number of edges
• 𝑓 : the maximum flow
• 시간복잡도를 줄이기 위해
단일 간선으로 연결된 정점들을
하나의 정점으로 압축하는 방법이 있다.
Max-flow min-cut theorem
(Source에서 Sink로 흐른 최대 유량)
= (두 개의 이분 그래프로 구분 짓기 위해 제거해야 하는 간선들의 가중치 합의 최솟값)
How to apply
• 용량(capacity)의 개념을 ‘할당량’이라고 볼 수 있다.‘최대 C(u, v)만큼의 일(work)을 할당’
• ‘각 직원은 1개의 일만 할 수 있다.’: 직원을 정점으로 보았을 때에 해당 정점에 들어가는 간선 용량은 1
• ‘각각의 일을 담당하는 사람은 1명이어야 한다.’: 일을 정점으로 보았을 때, 직원 정점에서 일 정점으로 들어가는 간선 용량은 1
BOJ 11375 Graph Modeling
Other problems
• 축사배정 : https://www.acmicpc.net/problem/2188 (하)
• 열혈강호2 : https://www.acmicpc.net/problem/11376 (하)
• 열혈강호3 : https://www.acmicpc.net/problem/11377 (하)
• 열혈강호4 : https://www.acmicpc.net/problem/11378 (중)
• 돌맹이 제거 : https://www.acmicpc.net/problem/1867 (중)
• 숫자판 만들기 : https://www.acmicpc.net/problem/2365 (중상)
• 소수 쌍 : https://www.acmicpc.net/problem/1017 (상)