[트리] LCA, 오일러 투어, 단절점 찾기,
2023. 8. 1. 11:47
LCA (Lowest Common Ancestor)
- 노드 A, B의 최소 공통 조상을 찾는 것.
- DFS/BFS를 수행해 트리의 각 노드 깊이와 부모 노드에 대해 저장한다.
- 노드 A, B의 부모를 따라 하나씩 올라가 (depth를 맞춘 상태로 시작) 최소 공통 조상을 찾는다.
===> 이는 $O(N)$만큼 걸림.
- 보다 빠르게 LCA를 수행하는 방법.
parent[K][V]=parent[k-1][parent[k-1][V]]
: V 노드의 $2^K$번째 조상 노드 - (K, V의 순서에 따라 속도가 매우 달라짐. (2차원 배열의 구현특성 때문에))
- 가로로 -> 이 방향으로 순회하는 것이 더 빠름.
- 우리가 갖고있는 정보. 한 노드의 바로 위의 부모 노드는 무엇인지 알고 있음. (
parent[0][x]
)- 이때
parent[1][x]
를 구하는 방법 : 내 부모 노드에게 물어봐야함. '너의 부모노드, 즉 1($=2^0$)칸 위의 있는 노드는 누구냐' - 그래서 식은 왜 k-1? : 위로 올라가는건 $2^k/2=2^{k-1}$임.
- 이때
- 이때 LCA의 아래쪽 노드들은 모두 다르고, LCA의 위쪽 노드들은 모두 공통 조상이 됨.
- 올라가서 조상이 같으면 포인터 유지 / 다르면 포인터 해당 노드로 포인터 이동
====> $O(\log{N})$
- 올라가서 조상이 같으면 포인터 유지 / 다르면 포인터 해당 노드로 포인터 이동
오일러 투어 euler tour
- dfs로 노드를 순회하여 노드에 인덱스를 붙였을 때, 이를 이용해 내 자식 노드가 어디부터 어디인지 알 수 있다.
- 이와 누적합 개념을 이용한 문제 백준 18227
단절점 찾기
- 무향 연결 그래프에서, 어떤 노드와 그 주위 간선들을 제거했을 때 그래프가 분리된다면 그 노드는 단절점이다.
- $order_V$ : 노드 V의 방문순서 (DFS)
- $low_V$ : 노드 V 이후에 방문한 노드들 중에 이 V를 거치지 않고 방문 가능한 노드들 중 order 중 제일 작은 값이다. 초기에는 자기자신 order로 초기화되어 있다.
- $chile_V$ : 노드 V의 자식 수
- 만약 확인하고자 하는 노드 A와 이와 연결된 B에 대해서
- A가 시작노드가 아닐 떄 : $order_A \gt low_B$ 이면 A는 단절점이다.
- A가 시작노드일 때 : $2 \gt chile_A$ 이면 A는 단절점이다.
'* 언어 | 알고리즘 > 알고리즘 개념' 카테고리의 다른 글
[트리] 최단경로 찾기 : 플로이드-워셜, 다익스트라, 벨만포드 (0) | 2023.08.03 |
---|---|
[그래프] 서로소 집합 Union-Find, 위상정렬, 최소신장트리 (0) | 2023.07.31 |
[트리] 펜윅 트리 (0) | 2023.07.27 |
[정수론] 합동식의 성질, 에라토스테네스의 체, (확장) 유클리드 호제법 (0) | 2023.07.27 |
[트리] 이진 트리, 힙, 세그먼트 트리 (0) | 2023.07.26 |