1. 최소공통조상
- 트리(Tree)구조에서 특정한 두 노드의 공통된 조상 중 가장 가까운 조상을 의미
- 특징 : 트리에서 두 노드 사이의 거리를 빠르게 구하는 등 다양한 계산에 활용가능
- 일종의 다이나믹 프로그래밍
반드시 이진트리(Binary Tree)가 아니어도 일반적인 형태의 트리라면 적용가능 - 예시)
▶ 위와 같은 트리구조에서 13,15번 의 최소 공통조상은 5번노드가 됨
2. 구하는 방법
2-1. LCA를 선형 탐색으로 구하기 : O(Depth)
- 가장 단순한방법
- 두 포인터를 두고 가리키는 정점이 같아질때까지 부모노드로 거슬러 올라가면 됨
▶ Parent[x]를 정점x의 부모노드라 할때, x =Parent[x]연산을 반복하면 됨
- 위의 그림과 같이 두정점의 LEVEL(깊이)가 다르다면 문제가 발생
13번은 깊이가 4, 11번은 3임
- 깊이를 맞춘 후 9번과 11번의 정점의 최소 공통 조상을 구하는 문제로 바꿈
▶ 두 정점의 깊이가 같기 때문에, 동시에 거슬러 올라가면 됨
2-2. LCA를 이분 탐색으로 구하기 : O(log(Depth)
- 시간 효율적
- Parent배열을 2차원으로 두어, Parent[x][k] ='x번 정점의 2^k번째 조상 노드의 번호'
- 예시)
- 만약 DFS를 통해 Root부터 트리를 구성한다면, 낮은 깊이의 노드르 반드시 먼저 탐색하므로 다음이 성립한다
- 선형 시간에 구하는 방법에서 부모 노드로 거슬러가는 과정을 2의 제곱수만큼 한번에 건너 뛸 수 있음
- 만약 13,4번 정점의 최소 공통조상을 구한다면, 13번 정점의 깊이를 4번 정점의 깊이로 맞추기 위해
5번 정점으로 바로 거슬러 올라간 뒤, 2번 정점으로 거슬러 올라 갈 수 있음
**예제문제)
https://www.acmicpc.net/problem/11437
11437번: LCA
첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가장 가까운 공통 조상을 알고싶은 쌍의 개수 M이 주어지고, 다음 M개 줄에는 정
www.acmicpc.net
더보기
참고)
https://coding-food-court.tistory.com/213#recentComments
LCA 최소 공통 조상
최소 공통 조상 이란 트리(Tree) 구조에서 특정한 두 노드의 공통된 조상 중에서 가장 가까운 조상을 의미 합니다. 최소 공통 조상 알고리즘은 트리에서 두 노드 사이의 거리를 빠르게 구하는 등
coding-food-court.tistory.com
https://4legs-study.tistory.com/121
최소 공통 조상 (LCA, Lowest Common Ancestor)
최소 공통 조상 (LCA, Lowest Common Ancestor) 최소 공통 조상은 트리 구조에서 임의의 두 정점이 갖는 가장 가까운 조상 정점을 의미한다. 위와 같은 예시 트리 구조에서, 13, 15번 정점의 최소 공통 조상
4legs-study.tistory.com
'CS지식 > 알고리즘' 카테고리의 다른 글
[CS 지식 - 알고리즘] DFS와 BFS (0) | 2023.01.19 |
---|---|
[CS지식 - 알고리즘] 순열과 조합 (0) | 2023.01.19 |
[CS 지식 - 알고리즘] 최장 증가 부분 수열(LIS) (0) | 2023.01.18 |
[CS 지식 - 알고리즘] 해시테이블(Hash Table) (0) | 2023.01.17 |
[CS 지식 - 알고리즘] 계수정렬(Counting Sort) (0) | 2023.01.16 |