Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- lombok
- java
- 일급 컬렉션
- spring security
- Spring
- factory
- Volatile
- OAuth 2.0
- synchronized
- 일급 객체
- Google OAuth
- builder
- Dependency Injection
Archives
- Today
- Total
HJW's IT Blog
Algorithm: 트리 지름 본문
트리의 지름이란 트리의 두 정점 u 와 v 를 잇는 거리의 최대값이다. 즉, 트리 내에서 가장 먼 두 정점 사이의 거리를 의미한다.


Brute-Force Method
모든 가능한 u, v 의 조합을 다 해본다
이 때 걸리는 시간은 O(n^3)
--> 비효율적
O(n) 알고리즘
- 트리에서 임의의 정점 x를 선택한다
- x에서 가장 먼 정점 y를 BFS 를 통해 찾는다
- y 에서 가장 먼 정점 z를 찾는다
- y 와 z 가 가장 멀리 떨어져 있는 정점이다.
- 위 방법의 증명은 다음과 같다
- 원하는 답이 u 와 v 라고 하자. 이때, x를 정한 뒤 가장 먼 점이 y라고 한다면 3가지 가능성이 존재한다
- x = u (or v)
- y = u (or v)
- x,y,u,v 는 모두 다른 경우
- x = u (or v) 나 y = u(or v) 의 경우 답이 맞다는 것이 자명하다. 하지만 x,y,u,v 가 모두 다른 경우는 오직 한가지인데, 이는 최대 거리가 동일한 경우이다. ex) u ~ y == u ~ v
- x,y,u,v가 모두 다를 때, 만약 x ~ y의 경로와 u ~ v 의 경로가 교점 t를 가지는 경우(가질수도 있고 아닐수도 있음)
- y 가 x 에서 가장 먼 정점이 아니려면 --> t~y가 t~ v 보다 멀어야 한다.
- 그러지 않을 경우, y 가 x에서 가장 먼 노드라는 가정이 어긋난다.
- 즉, u~t~y 가 u~t~v 보다 멀다.
- y 가 x 에서 가장 먼 정점이 아니려면 --> t~y가 t~ v 보다 멀어야 한다.
- 원하는 답이 u 와 v 라고 하자. 이때, x를 정한 뒤 가장 먼 점이 y라고 한다면 3가지 가능성이 존재한다

- 교점 t 가 없을 경우
- x~y 와 u~v 를 잇는 경로가 존재해야 하는데 이를 a~b 라고 하겠다
- 정의상, a~y의 거리가 a~b~u, a~b~v 보다 멀다(y 가 x에서 가장 먼 점이기 때문.
- u ~ v 의 거리와 u ~ y 의 거리를 비교해 보자.
- 이때, u ~ b 는 둘 모두 포함.
- 즉, b~a~y 와 b~v를 비교.
- a~ y 가 a~b~v 보다 멀다
- 즉 b~a~y 가 더 멀고, u~v의 거리가 u~y 보다 짧다.

'알고리즘' 카테고리의 다른 글
| Algorithm: 욕심쟁이 기법 (0) | 2023.04.14 |
|---|---|
| Algorithm: 과반수 찾기 (0) | 2023.04.14 |
| Algorithm: 부분합(Prefix Sum) (1) | 2023.04.13 |
| Algorithm: RMQ(Range Minimum Query) (0) | 2023.04.12 |
| Euclid Algorithm: GCD (0) | 2023.04.11 |