[1. 개요]
네트워크의 최대 유량을 계산 할 때, 포드-풀커슨 알고리즘 외 디닉 알고리즘에 대한 정리
[2. 알고리즘]
디닉 알고리즘은 두가지 단계로 구성 된다.
- Level graph 의 생성
- Blocking flow 를 지키면서, 유량을 흘려보냄.
더 이상 source 에서 sink 로 유량을 흘려 보낼 수 없을 때까지 위 과정을 반복한다.
- 증가 경로 (Augmenting path) 가 없을 때 까지
[3. Level graph]
레벨 그래프는 BFS 를 이용하여 계산한다.
Source 에서 시작하여, Sink 에 도달 할 때 까지 BFS 를 진행 하는 것이다.
여기서 Level 은 각 노드에 설정 되는데, Source 에서 해당 노드까지 도달한 최소 hop 이라고 생각하면 된다.
- edge 의 weight 가 없는 경우(혹은 weight 가 모두 같은 경우), bfs 는 최단 경로를 계산 한다.
단, 한가지 중요한 점은 a -> b 로 이동 시 잔여 용량이 있어야 한다는 것 이다.
- 알고리즘이 1~2 과정을 반복하므로, 현재 네트워크에서 잔여 용량은 최초와 다를 수 있다.
[4. Blocking flow]
차단 유량은 레벨 그래프가 계산 된 뒤, source 에서 sink 로 실제 유량을 흘려 보내는 것이다.
여기서 중요한 점은 몇 가지가 있는데,
- 경로 상 인접한 노드의 level 은 정확히 1 차이가 나야하고,
- edge 의 잔여 용량이 있어야 하며,
- source -> sink 로 가는 모든 경로에 대해서 진행 해야 한다는 것이다.
경로는 여러개 가 될 수 있으므로, 하나의 경로 생성 후, 해당 경로 상 잔여 용량을 반드시 갱신해주어야 한다.
[5. 구현]
관련 예제의 코드로 대체 한다.
'알고리즘 > 이론' 카테고리의 다른 글
Convex hull (볼록 껍질) (0) | 2025.01.02 |
---|---|
이분매칭 (0) | 2023.05.11 |
네트워크 유량 - 예제1 (0) | 2023.05.08 |
네트워크 유량, 포드-풀커슨 (0) | 2023.05.03 |
bfs - 예제2 (0) | 2023.04.08 |