[그래프 알고리즘] 09. Maximum Flow Problem (Part 3)

jmt·2024년 6월 13일

알고리즘

목록 보기
17/18

Introduction

이때까지 flow network의 maximum flow를 구하는 방법과 핵심 아이디어가 되는 포드-풀커슨 방법과 이를 구현한 알고리즘인 에드몬드-카프 알고리즘을 배웠다. 이번에는 이를 이용해 이분 그래프(bipartite graph)가 무엇인지 배워보고 maximum bipartite matching은 어떻게 할 수 있는지 배워보자.

Bipartite Graph

이분 그래프는 모든 인접한 vertex끼리 서로 다른 색으로 칠했을 때, 모든 vertex가 두 가지 색으로만 칠해지는 그래프를 의미한다. 즉, 그래프의 모든 vertex가 V,UV, U라는 2개의 disjoint set으로 나누어져 있게 되고, 모든 edge는 VVUU를 이어야 한다.

Matching in a Graph

주어진 무방향 그래프 G=(V,E)G = (V, E)에 대해 하나의 매칭(matching)은 간선의 부분집합(MEM \subseteq E)을 의미한다. 이때 모든 정점 vVv \in V에 대해 MM에서 최대 한 개의 edge는 vv를 잇는다. 그리고 어떤 vertex vVv \in V가 매칭 MM의 한 edge에 의해 이어지면, vv는 '매칭된다'라고 한다. 그렇지 않다면 vv는 '매칭이 안 된다' 라고 한다. 최대 매칭이라는 것은 결국 최대 크기를 가진 매칭을 의미한다. 다시 말해, 최대 매칭 MM은 임의의 매칭 MM^{\prime}에 대해 MM|M| \ge |M^{\prime}|을 만족해야 한다.

Maximum Bipartite Matching Problem

최대 이분 매칭 문제는 결국 이분 그래프에서 최대 매칭 MM을 찾는 문제이다. 주어진 이분 그래프 G=(V,E)G = (V, E)에서 polynomial time 내에 최대 매칭을 찾기 위해서는 포드-풀커슨 방법을 사용할 수 있다. 그 방법은 아래 그림과 같다.

그래프 GG의 vertex들의 집합 VVL,RL, R로 나눌 수 있으면 이분 그래프이다. 그리고 위 그림의 (c)와 같이 source ss vertex와 sink tt vertex를 추가하여 하나의 flow network를 만들면 된다. 그 뒤 우리가 기존에 하던 포드-풀커슨 방법을 적용시키면 풀 수 있다. 예를 들어 가장 위에 있는 이분 그래프를 예시로 적용해보자. VV에 속하는 vertex들은 모두 source ss vertex와 연결되어 있고, UU에 속하는 vertex들은 모두 sink tt vertex와 연결되어 있다고 하자. 또한 sstt를 새로 추가했고, s,ts, t와 기존의 vertex들이 연결되어 있는 새로운 flow network를 나타내는 그래프를 G=(V,E)G^{\prime} = (V^{\prime}, E^{\prime})이라 하자.

왼쪽과 같이 빨간색으로 칠해진 edge가 현재 Matching이라고 하자. 왼쪽 그림에서 residual network를 만들고, residual network에 존재하는 증강 경로, ss에서 tt로 도착하는 path가 있는지 찾아본다. 그 결과 s2617ts \rightarrow 2 \rightarrow 6 \rightarrow 1 \rightarrow 7 \rightarrow t의 path를 발견할 수 있었다. 그리고 포드-풀커슨 방법에 따라 augmentation을 수행하게 되면, 새로운 flow가 있는 flow network는 위 그림의 오른쪽이 된다. 그리고 다시 residual network를 그려 증강 경로가 있는 지 찾아보면, 존재하게 된다. 해당 경로는 s3849510ts \rightarrow 3 \rightarrow 8 \rightarrow 4 \rightarrow 9 \rightarrow 5 \rightarrow 10 \rightarrow t가 된다. 다시 augmentation을 수행하면, 아래의 그림과 같은 새로운 flow network가 그려진다.

그리고 해당 flow network의 residual network에는 더 이상의 증강 경로가 존재하지 않는다. 그렇기에 현재 flow network의 최대 유량이 흐르고 있다는 것을 알 수 있고, 이것이 곧 Maximum Matching. 최대 이분 매칭 문제를 해결하게 된 것이다. M=5|M| = 5가 된다.

Analysis

기존 이분 그래프의 모든 vertex는 최소한 하나의 edge를 가지게 된다. 그렇기에 다음을 따른다.

EV/2V2E|E| \ge |V|/2 \rightarrow |V| \le 2|E|

또한 이분 그래프에서 flow network를 형성하면서 sstt가 각각 기존의 vertex들과 이어지는 새로운 edge를 추가했다. 이는 E=E+V|E^{\prime}| = |E| + |V|를 의미한다. 그렇기에 다음과 같이 정리할 수 있다.

EE=E+VE3E|E| \le |E^{\prime}| = |E| + |V| \rightarrow |E^{\prime}| \le3|E|

최종적으로 E=Θ(E)|E^{\prime}| = \Theta(E)가 된다.

이분 그래프에서 모든 매칭은 크기가 최대 min(L,R)\text{min}(L, R)이므로 O(V)O(V)가 된다. 그렇기에 GG^{\prime}의 최대 유량의 값도 O(V)O(V)가 된다. 결론적으로 이분 그래프에서 maximum matching을 찾는데 걸리는 시간은 O(VE)=O(VE)O(VE^{\prime})=O(VE)이라 할 수 있다.

profile
고분자/컴공

0개의 댓글