flow network
훨씬 상세하고 잘 정리된 글이 있어 다음으로 대체
Definition
Flow network(플로우 네트워크) \(G = (V, E)\)
- 방향 그래프
- \((u,v) \in E\) 일때, 용량 \(c(u, v) \ge 0\)
- \((u,v) \in E\) 일때, \((v,u)\) 가 존재하지 않음
- 자기순환 루프를 허용하지 않음
- 출발점(source) \(s\) 와 도착점(sink) \(t\)가 존재
- \(\forall v \in V\)에 대해 \(s \rightsquigarrow v \rightsquigarrow t\) 경로가 존재.
A flow in G
아래 두가지 특성을 만족시키는 실수 함수 \(f : V \times V \rightarrow R\)
- Capacity constraint: \(\forall u,v \in V\)일때, \(0 \le f(u,v) \le c(u,v)\)
- Flow conservation: \(\forall u,v \in V - \{s,t\}\) 일때 다음을 만족
- 플로우는 용량을 넘어설수없다
- 시작과 끝 정점을 제외하고 각 정점에서 들어오는 플로우와 나가는 플로우는 같다
\(\left\vert f\right\vert : f\)의 값
\[\left\vert f\right\vert = \sum_{v \in V} f(s, v) - \sum_{v \in V} f(v, s)\]The Ford-Fulkerson method
FORD-FULKERSON (G, s, t)
1 for each edge (u, v) ㄷ G.E
2 (u, v).f = 0
3 while there exists a augementing path p
from s to t in the residual network G_f
4 c_f(p) = min {c_f(u, v) : (u, v) is in p}
5 for each edge (u, v) in p
6 if (u, v) ㄷ E
7 (u, v).f = (u, v).+ C_f(p)
8 else (v, u).f = (v, u).f - c_f(p)
시작점 s, 도착점 t을 가진 플로우 네트워크 \(G = (V, E)\)와 \(G\)상의 플로우 \(f\), \(u, v \in V\)라 고려하자.
residual capacity \(c_f(u, v)\)
- \(c_f(u, v) = c(u, v) - f(u, v)\) (if \((u, v) \in E\))
- \(c_f(u, v) = f(v, u)\) (if \((v, u) \in E\))
- \(c_f(u, v) = 0\) (else)
residual network(잔여 네트워크) \(G_f = (V_f, E_f)\)
\[E_f = \{(u,v) \in V \times V : c_f(u, v) > 0\}\]역방향 간선이 존재함으로 엄밀한 플로우 네트워크는 아니지만 플로우를 정의 할 수 있다.
augmentation(증강)
\(f\)가 \(G\)의 플로우고, \(f'\)을 잔여 네트워크 \(G_f\)상의 플로우라 할때, \(f \uparrow f'\)을 \(V \times V \rightarrow R\)로의 함수로 정의
- \((f \uparrow f')(u, v) = f(u, v) + f'(u, v) - f'(v, u)\) (if \((u, v) \in E\))
- \((f \uparrow f')(u, v) = 0\) (else)
\(\left\vert f \uparrow f' \right\vert\)은 \(\left\vert f \uparrow f' \right\vert = \left\vert f \right\vert + \left\vert f' \right\vert\)을 만족하는 \(G\)에서의 플로우다.
증명생략
augmenting path(증강 경로)
증강 경로 \(p\)는 잔여 네트워크 \(G_f\)의 \(s\)에서 \(t\)로의 단순 경로이다. 이 잔여 네트워크의 정의로인해 경로 상의 잔여 용량을 실제 플로우 네트워크 \(G\)로의 플로우에 증가시키는 것이 가능하다.
증강 경로 \(p\)의 각 간선에서 증가시킬 수 있는 플로우의 최대량을 residual capacity of p
\(c_f(p) = min \{c_f(u,v) : (u, v)\) is on \(p\}\)
증명 생략
포드 풀커슨 메소드는 잔여 네트워크 상의 증강경로를 찾고 \(c_f(p)\)를 구하여 더하는 것이 알고리즘의 핵심이다.
Cut
\(Cut(S,T)\) \(V\)를 \(s \in S\) \(t \in T\) 가 되도록 하는 \(S\), \(T = V -S\)로의 분할이다.
\(Cut(S, T)\)의 net flow는 \(f(S, T)\)로 표시하고 다음을 만족한다.
\[f(S, T) = \sum_{u \in S} \sum_{v \in T}f(u,v) - \sum_{u \in S} \sum_{v \in T}f(v, u)\]용량
\[c(S, T) = \sum_{u \in S} \sum_{v \in T} c(u,v)\]minimum cut은 네트워크의 모든 Cut 중 용량이 최소가 되는 Cut
\[f(S, T) = \left\vert f \right\vert\]증명 생략
Max-flow min-cut theorem(최대 유량 최소 컷 정리)
다음 조건들은 동등 하다.
- \(f\) 는 \(G\)상의 maximum flow다
- 잔여 네트워크 \(G_f\) 가 증강 경로를 가지지 않는다.
- \(G\)상의 임의의 절단 \(cut(S,T)\)에 대해, \(\left\vert f \right\vert = c(S,T)\)
증명 생략
Edmonds-Karp algorithm
path p를 찾는 방법을 BFS로 수행.