패스잇
CS 기초 · 심화

네트워크 플로우(Network Flow) 문제 해결을 위한 알고리즘 중 Dinic 알고리즘이 Edmonds-Karp나 Ford-Fulkerson 알고리즘에 비해 실제 환경에서 훨씬 효율적인 이유를 설명하고, Dinic 알고리즘의 핵심 단계인 레벨 그래프 구성과 블로킹 플로우(Blocking Flow)를 찾는 과정을 자세히 설명하시오.

힌트 · Dinic 알고리즘은 BFS로 레벨 그래프를 구성하여 최단 경로 상의 증강 경로들을 찾고, DFS로 블로킹 플로우를 탐색하여 한 번의 레벨 그래프 구성으로 여러 증강 경로를 효율적으로 처리함으로써 성능을 향상시킵니다.

레벨 그래프블로킹 플로우BFS잔여 네트워크시간 복잡도

모범답안

Dinic 알고리즘은 Edmonds-Karp나 Ford-Fulkerson보다 실제 환경에서 훨씬 효율적인 이유는, 한 번의 레벨 그래프 구성으로 여러 개의 증강 경로를 동시에 찾고 처리하기 때문입니다.

핵심 단계는 다음과 같습니다.

먼저 BFS를 이용해 소스에서 싱크까지의 최단 경로 길이를 기준으로 레벨 그래프를 구성합니다. 이 레벨 그래프는 각 노드의 소스로부터의 최단 거리를 나타냅니다.

이후 DFS를 이용해 레벨 그래프 상에서 블로킹 플로우를 찾습니다. 블로킹 플로우란, 더 이상 레벨 그래프 상에서 소스에서 싱크로 도달할 수 없을 때까지 모든 가능한 증강 경로를 통해 최대한의 유량을 흘려보내는 것을 의미합니다.

이러한 레벨 그래프 구성과 블로킹 플로우 탐색 과정을 반복하면, 각 단계마다 잔여 네트워크에서 최단 경로를 따라 유량을 증가시키므로 전체적인 수렴 속도가 빨라져 효율성이 높아집니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 알고리즘 면접 질문

← 알고리즘 면접 질문 전체 보기