728x90
세그먼트 트리 (Segment Tree) | 인덱스 트리 (Index Tree)
세그먼트 트리
- 주어진 데이터들의 (구간 합) (데이터 업데이트) 가 함께 일어나거나, (최대, 최소) 를 구할 때 빠르게 수행하도록 고안해낸 자료구조이다.
→ 더 큰 범위를 ‘인덱스 트리’ 라고 말하기도 한다.
[1] 세그먼트 핵심
1) 데이터 초기화하기
- a) tree 배열 크기 선언
- b) 단말 노드에 arr 원본 배열 초기화
- c) setTree로 단말노드 위의 부모노드들을 자식 노드 활용해 세팅
2) 질의값 계산하기 | 구간합, 구간 곱, (구간 안의 최소값, 최대값), 데이터 갱신 등의 질의
- 질의는 보통 여러 가지가 있는데, 구간 합부터 들어보겠다.
- 질의값 계산 시에는 원본 idx를 트리의 idx로 맞춰주는 게 중요하다.
그리고, getSum에서 각각의 st, ed 에 대해서 구간 합을 구하는 과정은 다음과 같다.
- while(st ≤ ed) 인 동안
- (1) 시작 위치가 (오른쪽 자식 노드일 때) 독립 노드로 선택
- (2) 끝 위치가 (왼쪽 자식 노드일 때) 독립 노드로 선택
- 계속 거슬러 올라가면서 구간에 대한 합/곱/최소,최대 질의 철를 해준다.
728x90
'코딩 테스트 [준비] > [개념] 알고리즘 추가 정리 _ 2024' 카테고리의 다른 글
트리(Tree) | 최소 공통 조상 Lowest Common Ancestor (알고리즘) 정리 (55) | 2024.02.14 |
---|---|
트리(Tree) | 트리, 트라이, 이진트리 비교 (72) | 2024.02.09 |
MST | 최소 비용 신장 트리 (MST) 개념 간략한 정리 (2) | 2024.01.24 |
최단 경로| 다익스트라, 벨만포드, 플로이드 비교 (73) | 2024.01.13 |
DP 알고리즘 | LCS (최장 길이 공통 부분 수열) (74) | 2024.01.11 |