32
Network Flow 고려대학교 장홍준

Network flow

Embed Size (px)

Citation preview

Page 1: Network flow

Network Flow고려대학교 장홍준

Page 2: Network flow

Network Flow Problem

• 네트워크 최적화 문제의 한 종류

• 예시 : 부산에서 서울로 가는 고속도로를 생각하자.

각 고속도로 구간마다 시간 당 지나갈 수 있는 차량이 제한.

부산에서 서울로 단위 시간에 서울로 갈 수 있는 차량의 최댓값?

• 펌프, 배수관, 물의 최대량

Page 3: Network flow

유량 네트워크(Flow Network)

Page 4: Network flow

유량 네트워크(Flow Network)

• G=(V, E)

• 간선 (u, v)∊ E 의 음이 아닌 용량 c(u, v)≥0 을 갖는 방향 그래프

• 유량 네트워크에서는 두 정점을 출발지 s와 도착지 t로 구분

• 최대 유량 문제s와 t를 가지는 유량 네트워크 G가 주어졌을 때의 최대 유량

Page 5: Network flow

유량 네트워크(Flow Network)

• G(V, E) : 정점 집합 V와 간선 집합 E 그래프

• c(u, v) : u와 v 사이의 용량(capacity)

• f(u, v) : u와 v 사이의 유량(flow)

Page 6: Network flow

Augmenting path

• 시작점에서 도착점에 이르는 한 경로에 대해 흘릴 수 있는 최대 유량

Page 7: Network flow

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.

Page 8: Network flow

Augmenting path

• Step 4 : 시작점에서 도착점에 이르는 경로가 있다면

경로상의 용량 최솟값을 f라 하면,

1) 경로의 정방향에 유량 f를 흘림.

2) 경로의 역방향에 용량 f를 추가.

• P, Parent(P)에 대해

1) Flow( Parent(P) → P ) += f

2) Cap( P → Parent(P) ) += f

Page 9: Network flow

Augmenting path

Page 10: Network flow

Augmenting path

Page 11: Network flow

Augmenting path

Page 12: Network flow

Residual Network

• (Residual) = (Capacity) – (Flow) : 추가적으로 흐를 수 있는 양

• Augmenting path에서의 유량을 f라 하면,

역경로에 대해 Capacity를 f만큼 할당해주면 된다.

직관적으로 생각하면, 현재의 확대 경로(A) 생성 이후에추가적인 확대 경로(B)에 대해서 A의 유량을 줄여야 전체 유량이 최적.

한 간선에 쓸데없이 많은 유량을 흘림으로 인해 다른 path를 막아버리는 사태를 방지.

Page 13: Network flow

Network Flow Algorithm

• Ford-Fulkerson Algorithm

• Edmonds-Karp Algorithm

• Dinic’s Algorithm

Page 14: Network flow

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를 추가함.

Page 15: Network flow

Ford-Fulkerson Algorithm

Page 16: Network flow

Ford-Fulkerson Algorithm

Page 17: Network flow

Ford-Fulkerson Algorithm

Page 18: Network flow

Ford-Fulkerson Algorithm

Page 19: Network flow

Ford-Fulkerson Algorithm

Page 20: Network flow

Ford-Fulkerson Algorithm

Page 21: Network flow

Ford-Fulkerson Algorithm

Page 22: Network flow

Ford-Fulkerson Algorithm

Page 23: Network flow

Ford-Fulkerson Algorithm

Page 24: Network flow

Ford-Fulkerson Algorithm

Page 25: Network flow

C++ Code

Page 26: Network flow

Ford-Fulkerson Algorithm

• O(𝐸𝑓)

• 𝐸 : the number of edges

• 𝑓 : the maximum flow

• 시간복잡도를 줄이기 위해

단일 간선으로 연결된 정점들을

하나의 정점으로 압축하는 방법이 있다.

Page 27: Network flow

Max-flow min-cut theorem

(Source에서 Sink로 흐른 최대 유량)

= (두 개의 이분 그래프로 구분 짓기 위해 제거해야 하는 간선들의 가중치 합의 최솟값)

Page 28: Network flow

BOJ 11375

• https://www.acmicpc.net/problem/11375

Page 29: Network flow

How to apply

• 용량(capacity)의 개념을 ‘할당량’이라고 볼 수 있다.‘최대 C(u, v)만큼의 일(work)을 할당’

• ‘각 직원은 1개의 일만 할 수 있다.’: 직원을 정점으로 보았을 때에 해당 정점에 들어가는 간선 용량은 1

• ‘각각의 일을 담당하는 사람은 1명이어야 한다.’: 일을 정점으로 보았을 때, 직원 정점에서 일 정점으로 들어가는 간선 용량은 1

Page 30: Network flow

BOJ 11375 Graph Modeling

Page 31: Network flow

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 (상)

Page 32: Network flow