티스토리 뷰
트리에서 지름이란, 가장 먼 두 정점 사이의 거리 혹은 가장 먼 두 정점을 연결하는 경로를 의미한다. 선형 시간안에 트리에서 지름을 구하는 방법은 다음과 같다:
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$가 아니라 $x$ 혹은 $y$가 되어 $u$와 $v$를 연결하는 경로가 트리의 지름이 된다는 가정에 모순된다. 때문에 b.의 경우는 불가능하다는 것을 알 수 있다.
때문에 소개한 알고리즘은 트리의 지름을 올바르게 구한다는 것을 증명했다.
'공부' 카테고리의 다른 글
Li Chao Tree (Dynamic Convex Hull Optimization) (0) | 2021.03.08 |
---|---|
Stern-Brocot 트리 (0) | 2019.05.21 |
Convex Hull Optimization (4) | 2016.08.23 |
가장 먼 두 점 구하기 (6) | 2016.07.17 |
Building Heap in Linear Time (2) | 2016.07.01 |
- Total
- Today
- Yesterday
- USACO
- Dijkstra
- Knuth Optimization
- majority
- Algorithm
- dynamic programming
- Divide & Conquer
- Splay Tree
- Tree
- vote
- ioi
- BOI 2001
- TRIE
- IOI2014
- Parametric Search
- IOI2011
- Segment tree
- BOI
- Greedy Method
- Boyer-Moore Majority Vote Algorithm
- Boyer
- z-trening
- IOI2012
- IOI2013
- BOI 2009
- idea
- Dynamic Pramming
- moore
- optimization
- HackerRank
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |