6. 유량 네트워크
2020 AL林 정기 스터디 6
소스(source) : 유량이 시작하는 정점. 유일하게 유량이 발생하는 정점
싱크(sink) : 유량이 도착해야하는 정점
7. 유량 네트워크
2020 AL林 정기 스터디 7
용량(capacity) : 각 간선에 대해서 흐를 수 있는 최대 유량. c(u, v)
유랑(flow) : 다음 속성을 만족하는 값. f(u, v)
용량의 제한(capacity constraint)
유량의 보존(conservation of flows)
8. 유량 네트워크
2020 AL林 정기 스터디 8
용량의 제한(capacity constraint)
- 유량은 그 간선의 용량을 초과할 수 없다.
유량의 보존(conservation of flows)
- 소스와 싱크를 제외한 정점에는 들어오는 유량과 나가는 유량은 같다.
10. 유량 네트워크의 활용
2020 AL林 정기 스터디 10
• Traffic analysis
• Pipe network analysis
• Transportation networks
• Electrical distribution systems
... from wikipedia
12. 최대 유량 문제(maximum flow problem)
2020 AL林 정기 스터디 12
value of flow
- 소스에서 싱크로 흘러가는 유량의 크기
- (소스에서 나오는 유량은 모두 싱크로 흘러가므로) 소스에서 나오는 유량의 합
최대 유량 문제(maximum flow problem)
- value of flow의 최댓값을 구하는 문제
- 이 값을 구하는 알고리즘을 최대 유량 알고리즘이라고 한다.
21. 포드-풀커슨 메소드(Ford–Fulkerson Method)
2020 AL林 정기 스터디 21
더 자세히는..
while (residual network에서 증가경로 p가 있는 동안) {
c = (증가 경로 p의 residual capacity)
for (증가 경로의 모든 간선 (u, v)에 대해서) {
f(u, v) += c // 정방향 간선 유량에 c를 더한다.
f(v, u) -= c // 역방향 간선 유량에 c를 뺀다.
}
}
24. 애드몬드 카프 알고리즘(Edmonds-Karp Algorithm)
2020 AL林 정기 스터디 24
포드-풀커슨 메소드에서 증가경로를 찾을 때
BFS로 찾으면 O(VE2)안에 찾을 수 있다.
포드-풀커슨 메소드에서 BFS로 증가경로를 찾는 알고리즘을
애드몬드 카프 알고리즘이라고 한다.
25. 애드몬드 카프 알고리즘(Edmonds-Karp Algorithm)
2020 AL林 정기 스터디 25
BOJ 6086번 최대 유량 소스코드 http://boj.kr/5a590494c661405c81111be0fcade4ce
31. 이분 매칭(Bipartite Matching)
2020 AL林 정기 스터디 31
이분 매칭(Bipartite Matching)
- 이분 그래프에서 최대 매칭(Maximum Matching)을 찾는 문제
- 매칭(Matching) : 끝 점을 공유하지 않는 간선의 집합
32. 이분 매칭(Bipartite Matching)
2020 AL林 정기 스터디 32
이분 매칭의 시간 복잡도는 O(VE)입니다. → O(|E|f)에서 f가 O(V)
이분 매칭을 해결하는 두가지 방법
- 최대 유량 알고리즘을 이용
- 이분 매칭을 위한 더 간단한 구현
33. 1. 최대 유량 알고리즘을 이용
2020 AL林 정기 스터디 33
1
2
3
4
5
1
2
3
4
5
S E
∞
∞
∞
∞
∞
∞
∞
∞
∞
∞
1
1
1
1
1
1
1
1
1
34. 2. 더 간단한 방법
2020 AL林 정기 스터디 34
이분 매칭은 더 간단하게 해결이 가능합니다.
http://boj.kr/8ba10f3e14d94066a6c7fa4aab431688
45. 포드-풀커슨 메소드의 정당성
2020 AL林 정기 스터디 45
최대 유량 최소 컷 정리 (Max-flow min-cut theorem)
- https://en.wikipedia.org/wiki/Max-flow_min-cut_theorem
- 알고리즘 문제해결전략 997페이지
포드-풀커슨 메소드의 정당성을 증명함과 동시에
같은 알고리즘으로 최소 컷 문제도 해결할 수 있음을 보입니다.
46. 애드몬드 카프의 시간복잡도 증명
2020 AL林 정기 스터디 46
Edmonds-Karp Algorithm이 VE^2인 이유
증가 경로를 많아야 VE번 찾는다는 것을 보이면 된다. (BFS 한번이 O(E)이기 때문)
정의 1. 간선의 capacity = (간선에 흐른 flow)인 간선을 포화 간선이라 정의한다. 그렇지 않은 간선을 비포화
간선이라고 정의한다.
정의 2. 비포화 간선들로 이루어진 그래프를 Residual Graph라고 정의한다.
47. 애드몬드 카프의 시간복잡도 증명
2020 AL林 정기 스터디 47
Lemma 1. Residual Graph에서 현재의 source - sink 최단경로가 D라고 했을 때, 최단 경로를 D로 유지하는 동안 E번만 증가 경로를
찾는다.
증명. 한번 flow를 흘리면, Residual Graph의 간선 중 최소 하나가 포화 상태로 차 버리게 된다. 포화 상태로 차게 된다면, 최단 경로가 D
인 한 다시 그 간선을 보게 될 일은 없다. (역변을 타게 되면 최단 경로가 D+2 이상이 되는 고로, 그러한 경로는 찾지 않는다) 역변을 탈 일
이 없으니 간선은 비포화에서 포화로만 변하고, 모든 간선이 포화로 변하면 경로가 없게 된다. 고로 최단 경로를 고정했을 때 O(E) 개의
증가 경로만을 찾는다.
최단 경로의 길이는 V 이하이니 이러한 과정이 V번 일어난다. 고로, 많아야 VE번 증가 경로를 찾는다.
출처: https://koosaga.com/133 [구사과]
49. 다수의 소스와 다수의 싱크가 있는 경우
2020 AL林 정기 스터디 49
소스 하나를 만들고 모든 소스에 용량을 ∞으로 연결합니다.
싱크 하나를 만들고 모든 싱크를 용량을 ∞으로 연결합니다.
50. 정점을 한번 밖에 못 지나는 경우
2020 AL林 정기 스터디 50
출처 : https://kks227.blog.me/220804885235
51. 인접 리스트로 구현
2020 AL林 정기 스터디 51
간선의 용량과 유량을 인접 행렬로 가지고 있으면 시간이 오래 걸릴 수 있습니다.
아래와 같이 간선 구조체를 만들 수 있습니다.
52. 최소 컷 = 최대 유량
2020 AL林 정기 스터디 52
최소 컷(min-cut) : 두 정점을 분리하기 위한 최소 비용
출처 : https://kks227.blog.me/220808685331
최소 컷은 최대 유량과 동치이며
이에 대한 설명이 최대 유량 최소 컷 정리(max-flow min-cut theorem)입니다.
연습문제 : https://www.acmicpc.net/problem/14286
53. 간선에 비용(cost)이 추가된 경우
2020 AL林 정기 스터디 53
간선에 비용(cost)가 추가되고
최소 비용으로 max flow를 구하고 싶다면
증가 경로(augmenting path)를 찾을 때 최단 경로로 찾으면 됩니다.
이를 MCMF(Min-Cost Max-Flow)라고 합니다.
연습문제 : https://www.acmicpc.net/problem/11408
54. 더 빠른 알고리즘
2020 AL林 정기 스터디 54
더 빠른 최대 유량 알고리즘
- 디닉 알고리즘(Dinic’s Algorithm)
더 빠른 이분 매칭 알고리즘
- 호프크로프트 카프 알고리즘(Hopcroft-Karp Algorithm)
55. 이분 매칭에 관한 정리
2020 AL林 정기 스터디 55
http://www.secmem.org/blog/2019/12/15/theorem-about-bipartite-matching/
- Minimum Vertex Cover (최소 버텍스 커버, 쾨닉의 정리)
- Maximum Independent Set
- Minimum Path Cover
- Maximum Anti-Chain
최소 버텍스 커버 제외하고 저도 잘 모릅니다..
56. 서큘레이션
2020 AL林 정기 스터디 56
용량에 상한 뿐만 아니라 하한이 있는 경우(최소한 흘려야하는 유량)
이 하한을 demand라고 하고
이를 만족하는 해가 존재하는지를 판별하는 문제를 Circulation Problem
최대 플로우를 구하는 것을 Maximum Flow with Edge Demands라고 부릅니다.
저도 잘 모릅니다..
57. 연습 문제
2020 AL林 정기 스터디 57
BOJ 6086 최대 유량
- https://www.acmicpc.net/problem/6086
BOJ 2188 축사배정
- https://www.acmicpc.net/problem/2188
58. 참고 자료
2020 AL林 정기 스터디 58
https://koosaga.com/18
https://koosaga.com/133
https://kks227.blog.me/220804885235
https://kks227.blog.me/220807541506
https://kks227.blog.me/220808685331
알고리즘 문제해결 전략(구종만)
introduction to algorithms(CLRS)