우선 선형 시간안에 트리의 지름을 구하는 방법은 다음과 같다.
즉, 트리의 지름은 정점 Y와 정점 Z 사이의 거리를 의미한다.
이를 증명하는 방법은 다음과 같다.
만약 트리에서 정점 U와 정점 V를 연결하는 경로가 트리의 지름이라고 가정하자.
임의의 정점 X를 정하고, X에서 가장 먼 정점 Y를 찾았을 때, 아래와 같이 경우를 만들 수 있다.
이 경우 1, 2번은 무조건 올바르게 작동할 수 밖에 없다. 그야 DFS 알고리즘에 의해서 당연히 성립될 수 밖에 없다.
그럼 문제는 3번의 경우이다.
3번의 경우 두 가지 경우의 수가 만들어진다.
1. 정점 X와 정점 Y를 연결하는 경로가 정점 U와 정점 V를 연결하는 경로와 한 정점 이상을 공유하는 경우

정보는 다음과 같다.
2. 정점 X와 정점 Y를 연결하는 경로가 정점 U와 정점 V를 연결하는 경로와 완전히 독립인 경우

이 경우의 정보도 다음과 같다.
그러므로 이 경우 즉, 정점 X와 정점 Y를 연결하는 경로가 정점 U와 정점 V를 연결하는 경로가 완전히 독립되는 경우는 존재할 수 없다.
이렇게 되면 어떤 임의의 정점에서 가장 먼 정점을 찾게 되고 그 정점에서 가장 먼 정점을 찾으면 그것이 트리의 지름이 된다는 것은 부정할 수 없는 이론이 된다.
https://velog.io/@zioo/트리의-지름-구하기
트리의 지름 구하기
트리의 지름
velog.io
| 플로이드 워셜(Floyd-Warshall) (0) | 2023.06.28 |
|---|---|
| 벨만 포드 알고리즘(Bellman-Ford Algorithm) (0) | 2023.05.23 |
| BFS는 왜 가중치가 있는 그래프에서 사용할 수 없을까? (1) | 2023.05.21 |
| 다익스트라(Dijkstra) 알고리즘 (0) | 2023.05.21 |