최소 공통 조상(LCA)
Last updated
Last updated
Lowest Common Ancestor란?
어떻게 찾죠?
해당 정점의 depth와 parent를 저장해두는 방식이다. 현재 그림에서의 depth는 아래와 같을 것이다.
parent는 정점마다 가지는 부모 정점을 저장해둔다. 위의 예시에서 저장된 parent 배열은 아래와 같다.
이제 이 두 배열을 활용해서 두 정점이 주어졌을 때 LCA를 찾을 수 있다. 과정은 아래와 같다.
이런 방식으로 구현할 경우 시간복잡도는 O(depth)
가 나온다.
이를 빠르게 하기 위해 이분탐색을 이용해보자.
각 노드가 거슬러 올라가는 속도를 2의 제곱 형태로 올라가도록 하여 O(logN)의 시간복잡도를 가집니다.
15칸을 올라가려면 8+4+2+1칸 순서로 올라감
메모리를 더 사용하여 각 노드에 대하여 2^i번째 부모에 대한 정보를 기록합니다.
공간 복잡도를 늘리고 시간 복잡도를 줄이는 Trade-off 기술