티스토리 뷰
트리에서 지름이란, 가장 먼 두 정점 사이의 거리 혹은 가장 먼 두 정점을 연결하는 경로를 의미한다. 선형 시간안에 트리에서 지름을 구하는 방법은 다음과 같다:
1. 트리에서 임의의 정점 $x$를 잡는다.
2. 정점 $x$에서 가장 먼 정점 $y$를 찾는다.
3. 정점 $y$에서 가장 먼 정점 $z$를 찾는다.
트리의 지름은 정점 $y$와 정점 $z$를 연결하는 경로다.
증명) 트리에서 정점 $u$와 정점 $v$를 연결하는 경로가 트리의 지름이라고 가정하자. 임의의 정점 $x$를 정하고, 정점 $x$에서 가장 먼 정점 $y$를 찾았을 때, 아래와 같이 경우를 나눌 수 있다.
i. $x$가 $u$ 혹은 $v$인 경우
ii. $y$가 $u$ 혹은 $v$인 경우
iii. $x$, $y$, $u$, $v$가 서로 다른 경우
자명하게 i., ii.에 대해서 위 알고리즘이 트리의 지름을 올바르게 구한다는 것을 알 수 있다. 이제 iii. 경우에 대해서 알고리즘이 트리의 지름을 올바르게 구한다는 것을 증명하면 된다. iii. 경우일 때 아래와 같이 두 가지 경우가 가능하다.
a. 정점 $x$와 정점 $y$를 연결하는 경로가 정점 $u$와 정점 $v$를 연결하는 경로와 한 점 이상 공유하는 경우
b. 정점 $x$와 정점 $y$를 연결하는 경로가 정점 $u$와 정점 $v$를 연결하는 경로와 완전히 독립인 경우
$d(s, t)$를 트리에서 정점 $s$와 정점 $t$의 거리라고 하자. a.의 경우 아래 그림에서 $d(t, y) = \max(d(t, u), d(t, v))$라는 것을 알 수 있다. 때문에 위 알고리즘은 트리의 지름을 올바르게 구한다.
b.의 경우 아래 그림과 같은 상황이 된다는 것인데 $u$에서 제일 먼 점이 $v$가 아니라 $y$가 되어 $u$와 $v$를 연결하는 경로가 트리의 지름이 된다는 가정에 모순된다. 때문에 b.의 경우는 불가능하다는 것을 알 수 있다.
때문에 소개한 알고리즘은 트리의 지름을 올바르게 구한다는 것을 증명했다.
'공부' 카테고리의 다른 글
Stern-Brocot 트리 (0) | 2019.05.21 |
---|---|
트리의 지름 구하기 (1) | 2016.10.11 |
Convex Hull Optimization (4) | 2016.08.23 |
가장 먼 두 점 구하기 (6) | 2016.07.17 |
Building Heap in Linear Time (2) | 2016.07.01 |
String Matching Algorithm (4) | 2016.06.24 |
- Total
- 158,148
- Today
- 28
- Yesterday
- 66
- Algorithm
- Knuth Optimization
- BOI 2009
- IOI2013
- optimization
- Greedy Method
- vote
- TRIE
- Segment tree
- z-trening
- idea
- moore
- Boyer
- Tree
- Dijkstra
- Splay Tree
- IOI2011
- Parametric Search
- BOI 2001
- HackerRank
- BOI
- Dynamic Pramming
- ioi
- IOI2014
- Boyer-Moore Majority Vote Algorithm
- dynamic programming
- Divide & Conquer
- IOI2012
- USACO
- majority