Hard deck/Module

Lowest Common Ancestor

서버관리자 페페 2022. 8. 31. 15:38

기본 방법

 

-

루트 노드에서 BFS or DFS를 시작해,

각 노드의 부모 노드와 깊이를 저장

 

깊이가 다른 경우

더 깊은 노드의 부모 노드를 1개씩 올려주면서 

같은 깊이로 맞춤

 

*PipeLine

만약 두 노드가 같게 나온다면, 해당 노드가 LCA이므로 탐색 종료

 

-

깊이가 맞춰진 상태에서 

동시에 부모 노드로 올라가면서 누 노드가 같아질 때까지 반복

if (2 !== 3) > 시행

 

 

최소 공통 조상 빠르게 구하기

 

-

깊이를 맞춰 주거나, 부모 노드로 한 단계씩 올라갈때

한 단계 > 2^k 씩 올라가 비교하는 방법

 

-

기존 부모 노드만 저장해 두던 방식에서

2^k번째 위치의 부모 노드도 추가로 저장할 것

 

-

P[K][N]

N번 노드의 2^K번째 부모 노드 번호

 

-

점화식

P[K][N] = P[K-1][P[k-1][N]]

 

N번 노드의 2^K번째 부모 노드는, N의 2^(K-1)번째 부모 노드의 2^(K-1)번째 부모 노드

K가 16일 때, 8번째 부모 노드의 8번째 부모 노드 

'Hard deck > Module' 카테고리의 다른 글

값 변경하기  (0) 2022.09.01
세그먼트 트리  (0) 2022.08.28
Minimum Spanning Tree  (0) 2022.08.18
Floyd - Warshall  (0) 2022.08.17
Bellman-ford-moore  (0) 2022.08.17