Skip to content

Commit

Permalink
Update 2024-09-12-ssca1.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Annyeong-One authored Sep 12, 2024
1 parent 11e72fc commit dc5c1ff
Showing 1 changed file with 12 additions and 26 deletions.
38 changes: 12 additions & 26 deletions _posts/2024-09-12-ssca1.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,3 @@
---
title: 조합론 및 알고리즘 여름학교 Part 1. Flows and Cuts
author: Annyeong1
date: 2024-09-12 12:00:00 +0900
categories:
- other
- math/cs
tags:
- mathematics
- algorithms
- cp
math: true
mermaid: true
---
2024년 7월 22~26일에 기초과학원 이산수학그룹에서 진행한 조합론 및 알고리듬 여름학교에 참가하여 수업을 들었습니다. 정리를 하다가 대입 시즌이 겹쳐서 정리하는 데 너무 오랜 시간을 사용해서, 드디어 내용정리를 시작했습니다.

이 글은 여름학교에서 진행한 두 강의 중 Chien-Chung Huang 교수님의 <Combinatorial Optimizations\> 강의 중 유량(포드-풀커슨, 푸시-리라벨) 부분에 대해 다룹니다.
Expand All @@ -30,34 +16,34 @@ mermaid: true
$f$를 flow라 합니다.

$\delta^+(v)$를 정점 $v$에서 나가는 모든 간선, $\delta^-(v)$를 $v$로 들어오는 간선이라 두면,
$$|f| = \sum_{e \in \delta^+(s)} f(e) - \sum_{e \in \delta^-(s)} f(e)$$
$$\|f\| = \sum_{e \in \delta^+(s)} f(e) - \sum_{e \in \delta^-(s)} f(e)$$
를 flow value라 합니다. (즉 소스에서 싱크로 흐르는 용량을 유량이라 합니다.)

### Definition: Max-Flow Prob.
$G$가 주어질 때, $|f|$가 최대가 되는 flow $f$를 찾는 문제를 최대 유량 문제라 합니다.
$G$가 주어질 때, $\|f\|$가 최대가 되는 flow $f$를 찾는 문제를 최대 유량 문제라 합니다.

## Definition: Cut
마찬가지로 유향 그래프 $G=(V, E)$에 대해서 용량, 소스, 싱크를 정의해 두면,
- $C \subset V$, $C \neq V$, $s \in C$, $t \notin C$ (즉 전체집합이 아닌 정점 부분집합이 $s$는 포함하지만 $v$는 포함하지 않는 경우)
인 정점 부분집합 $C$를 $s-t$ cut이라 합니다. 이때
$$|C| = \sum_{e \in \delta^+(C)} c(e)$$
$$\|C\| = \sum_{e \in \delta^+(C)} c(e)$$
를 cut value라 합니다. (즉 소스 포함 부분집합에서 싱크 포함 여집합으로 들어가는 유량의 총합입니다.)

### Definition: Min-Cut Prob.
$G$가 주어질 때, $|C|$가 최소가 되는 cut $C$를 찾는 문제를 최소 컷 문제라 합니다.
$G$가 주어질 때, $\|C\|$가 최소가 되는 cut $C$를 찾는 문제를 최소 컷 문제라 합니다.

## Maximum Flow vs. Min Cut - Weak Duality
이 둘은 서로 완전히 다른 문제같아 보이지만, 서로 쌍대성(Duality)을 가집니다. 재미있는 성질을 하나 끄집어 봅시다:

**Proposition 1.** $s \in X, t \notin X$를 만족하는 임의의 $X \subset V$에 대해, $$|f| = \sum_{e \in \delta^+(X)} f(e) - \sum_{e \in \delta^-(X)}f(e)$$이다.
**Proposition 1.** $s \in X, t \notin X$를 만족하는 임의의 $X \subset V$에 대해, $$\|f\| = \sum_{e \in \delta^+(X)} f(e) - \sum_{e \in \delta^-(X)}f(e)$$이다.

증명은 간단합니다. 플로우의 정의에서 $$|f| = \sum_{u \in X}\left [ \sum_{e \in \delta^+(u)} f(e) - \sum_{e \in \delta^-(u)} f(e) \right ]$$같이 식을 둘 수 있습니다(simple double-counting).
증명은 간단합니다. 플로우의 정의에서 $$\|f\| = \sum_{u \in X}\left [ \sum_{e \in \delta^+(u)} f(e) - \sum_{e \in \delta^-(u)} f(e) \right ]$$같이 식을 둘 수 있습니다(simple double-counting).

여기서 식의 우항은 항상 cut value $|C|$보다 작습니다, 왜냐면 $\sum_{e \in \delta^+(X)} f(e)$는 용량보다 클 수 없고 $\sum_{e \in \delta^-(X)}f(e)$는 0보다 작을 수 없으니까요. 그러니까 예쁜 따름정리 하나를 같이 끌고 올 수 있습니다:
여기서 식의 우항은 항상 cut value $\|C\|$보다 작습니다, 왜냐면 $\sum_{e \in \delta^+(X)} f(e)$는 용량보다 클 수 없고 $\sum_{e \in \delta^-(X)}f(e)$는 0보다 작을 수 없으니까요. 그러니까 예쁜 따름정리 하나를 같이 끌고 올 수 있습니다:

**Corollary 1(Weak Duality of Max Flow Min Cut).** 어떤 그래프의 임의의 flow $f$와 cut $C$에 대해, $|f| \leq |C|$.
**Corollary 1(Weak Duality of Max Flow Min Cut).** 어떤 그래프의 임의의 flow $f$와 cut $C$에 대해, $\|f\| \leq \|C\|$.

참고로, 아실 분들은 아시겠지만, Strong Duality에 의해 재미있게도 $\max|f|=\min|C|$랍니다. 알고리즘을 만드는 과정에서 증명될 예정입니다.
참고로, 아실 분들은 아시겠지만, Strong Duality에 의해 재미있게도 $\max\|f\|=\min\|C\|$랍니다. 알고리즘을 만드는 과정에서 증명될 예정입니다.

## Definition: Residual Network
용량이 $c$인 그래프 $G$의 어떤 유량 $f$에 대해 새로운 그래프 $G(f) = (V, F)$를 정의합시다. 이때 $F$는, $\forall e=(u,v) \in E$,
Expand All @@ -72,7 +58,7 @@ $G(f)$의 용량함수는 $u$라 둡시다.

그렇다면 직관적으로, $G(f)$에서 $f$의 용량만큼 $f$의 경로의 모든 간선이 '비어 있으니' 그만큼 유량을 '더 넣어줄 수' 있겠죠? 이렇게 했을 때 원래 그래프 $G$에서 flow의 조건이 깨지지 않기 때문에 유효합니다. 이런 동작을 augment라고 부르겠습니다.

**Proposition 2.** 어떤 flow $f$를 augmenting path $p$로 $min_{e \in P} u(e)$만큼 augment하면 $|f|$가 $min_{e \in P} u(e)$만큼 커집니다.
**Proposition 2.** 어떤 flow $f$를 augmenting path $p$로 $min_{e \in P} u(e)$만큼 augment하면 $\|f\|$가 $min_{e \in P} u(e)$만큼 커집니다.

당연하죠? 이걸 하는 알고리즘을 만들어봅시다.

Expand All @@ -90,11 +76,11 @@ Algorithm 1이 종료하면 이때의 $f$가 Max flow이다.

Proof. 그럼 Augm (s,t) Path가 없는 상태에 도달하면 최대 유량임을 보이면 됩니다.

$G(f)$에서 $s$에서 출발해 도달할 수 있는 정점 집합 $X$를 잡으면 $t \notin X$입니다. 즉 $X$는 cut입니다. 위에서 $|f| = \sum_{e \in \delta^+(X)} f(e) - \sum_{e \in \delta^-(X)} f(e)$였는데,
$G(f)$에서 $s$에서 출발해 도달할 수 있는 정점 집합 $X$를 잡으면 $t \notin X$입니다. 즉 $X$는 cut입니다. 위에서 $\|f\| = \sum_{e \in \delta^+(X)} f(e) - \sum_{e \in \delta^-(X)} f(e)$였는데,
- $e \in \delta^+(X)$에 대해 $f(e) < c(e)$인 것이 없고
- $e \in \delta^-(X)$에 대해 $f(e) > 0$인 것이 없습니다.
- 있다면 도달 가능한 정점 집합이 보다 크니까요.
그러면 $|f| = \sum_{e \in \delta^+(X)} c(e) - \sum_{e \in \delta^-(X)} 0 = |X|$입니다. 즉 $|f|=|X|$입니다. 앞에서 증명한 최대 유량-최소 컷의 weak duality에 의해 이런 $f$가 최대 유량이고 동시에 $X$가 최소 컷입니다.
그러면 $\|f\| = \sum_{e \in \delta^+(X)} c(e) - \sum_{e \in \delta^-(X)} 0 = \|X\|$입니다. 즉 $\|f\|=\|X\|$입니다. 앞에서 증명한 최대 유량-최소 컷의 weak duality에 의해 이런 $f$가 최대 유량이고 동시에 $X$가 최소 컷입니다.

엄청 대단한 게 맞긴 한데, 솔직히 그렇게 빠르게 작동하는 효율적 알고리즘은 아니긴 합니다. 말 그대로 augm path를 '아무거나' 뽑아도 알고리즘이 작동하기 때문에, 비효율적인 방법으로 뽑으면 정말 오래 걸릴 수도 있습니다. 시간복잡도를 계산하자면, 모든 용량이 정수인 경우 $O(nm\max(c))$가 되고, 실수인 경우 최악의 경우에서 시복이 bound되지 않습니다.

Expand Down

0 comments on commit dc5c1ff

Please sign in to comment.