FIFO Push-Relabel
1웨이브
활성 정점을 큐로 관리한다. 알고리즘을 웨이브(wave)의 연속으로 정의한다.
- W의 정점을 큐에서 꺼낸 순서대로 처리한다. 각 정점 u에 대해 Push 가능한 간선이 없어질 때까지 Push를 반복하거나, Push 가능한 간선이 없으면 Relabel한다.
- 새로 활성화된 정점은 이번 웨이브에 있었는지 여부와 무관하게 다음 웨이브에 추가한다.
- W의 정점을 모두 처리하면 웨이브가 끝난다.
2증명
하나의 웨이브에는 중복 정점이 없으므로 비포화 푸시는 최대 |W| ≤ n번이다.
H = max{h(v) : v 활성}으로 두자. Relabel이 없는 웨이브에서 W의 모든 정점이 비포화 푸시되어 비활성화되고, 새로 활성화된 정점의 높이는 최대 maxu∈W h(u) − 1 = H − 1이다. 따라서 Relabel 없는 웨이브가 끝날 때마다 H가 최소 1 감소한다.
H의 총 증가량은 정점당 높이 상한이 2n−1이므로 O(n2)이다. H ≥ 0이 항상 성립하므로 Relabel 없는 웨이브는 O(n2)번이다. Relabel이 있는 웨이브는 총 Relabel 횟수 이하이므로 O(n2)이다. 따라서 웨이브 수는 O(n2).
비포화 푸시의 총 횟수는 n × O(n2) = O(n3)이므로 시간 복잡도는 O(n3)이다.