일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 백트래킹
- Bellman-Ford
- 파이썬
- 프로그래머스
- 알고리즘
- BFS
- 마라마라빔
- programmers
- B대면노래방
- django
- Planned
- 그리디알고리즘
- 장고
- 백준
- 데이터베이스
- 소프트웨어공학
- Kruskal
- minimum spanning tree
- 실습
- SQL
- DFS
- 코드트리
- MyPlaylist
- 모각코
- DP
- 최소스패닝트리
- 동적계획법
- 함밥
- 종합설계
- codetree
Archives
- Today
- Total
Leta Learns
LCA Algorithm 본문
LCA (Lowest Common Ancestor) 알고리즘
: 최소 공통 조상을 찾는 알고리즘
즉, 두 노드에서 가장 가까운 공통 조상을 찾는 알고리즘
Segment Tree를 사용한 방법, DP를 사용한 방법이 존재하는데 DP 사용법에 대해서 공부하였다.
9와 6의 최소 공통 조상 : 2
4와 10의 최소 공통 조상 : 8
2와 15의 최소 공통 조상 : 1
- LCA 접근법
최소 공통 조상 찾는 방법
: 각 노드에서 부모를 타고 올라가서 같은 부모를 찾는다.
이때, 양 노드의 레벨이 같아야 함.
=> 각 노드의 부모와 레벨을 알아야 하고, 트리가 있어야 함
각 노드의 부모 노드, 레벨 저장하는 법
=> DFS 사용
재귀를 한 번씩 돌 때 마다 레벨 += 1, 부모 노드 또한 저장 가능.
ex) 6과 14의 공통 조상 구하기.
노드 | 레벨 | 부모노드 |
6 | 6 | 13 |
14 | 4 | 12 |
6의 레벨이 더 크므로, 노드 6을 노드 6의 부모 노드로 바꿔준다.
노드 | 레벨 | 부모노드 |
13 | 5 | 2 |
14 | 4 | 12 |
13의 레벨이 더 크므로, 노드 13을 노드 13의 부모 노드로 바꿔준다.
노드 | 레벨 | 부모노드 |
2 | 4 | 12 |
14 | 4 | 12 |
2와 14의 부모 노드가 12로 같다.
if 부모 노드가 다르다면, 부모 노드가 같을 때까지 양 노드를 부모 노드로 바꿔준다.
참고 : https://velog.io/@lre12/LCA-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98Lowest-Common-Ancestor
'Computer Science > Algorithm' 카테고리의 다른 글
오일러 경로, 회로 (Eulerian Trail) (0) | 2021.08.10 |
---|---|
Segment Tree (0) | 2021.08.06 |
Dijkstra Algorithm (0) | 2021.07.30 |
Bellman-Ford Algorithm (0) | 2021.07.28 |
Tree DP, Bitmasking DP (동적계획법 심화) (0) | 2021.07.27 |
Comments