본문으로 건너뛰기
김신건의 로그

Wavelet Tree: 값 범위 이진 분할

· 수정 · 📖 약 1분 · 179자/단어 #algorithm #data-structure #wavelet
Wavelet Tree, wavelet-tree, 웨이블릿 트리

정의

Wavelet Tree 는 시퀀스의 값 범위를 이진 분할하며 만든 트리 자료구조입니다. k-th smallest in range, rank/select, count in range 등을 O(log |Σ|) 에 답합니다.

  • |Σ| = 값 범위, N = 시퀀스 길이
  • 공간: O(N log |Σ|)
  • 전처리: O(N log |Σ|)
  • 쿼리: O(log |Σ|)

핵심 아이디어

각 레벨에서 값 범위를 반으로 나누어 왼쪽 반 (0) / 오른쪽 반 (1) 인지 비트 시퀀스를 만듭니다. 재귀적으로 각 반에 대해 반복.

input: [3 1 4 1 5 9 2 6]  (범위 [1..9])

level 0 (mid=5): [0 0 0 0 0 1 0 1]   0→[3 1 4 1 5 2], 1→[9 6]
level 1 왼쪽:    [0 0 0 0 1 0]        ... 재귀

응용

  • K-th smallest in [l, r]: Persistent Segtree 대체
  • Range count of values in [x, y]: O(log |Σ|)
  • 문자열 접미사 배열 위 처리: LCP 등

참고

이 글의 용어 (3개)
Order Statistics Tree (OST): rank/select 지원 BSTalgorithm
정의 Order Statistics Tree 는 각 노드에 서브트리 크기 를 추가로 저장한 균형 BST 입니다. 두 가지 새 연산을 O(log N) 에 지원합니다. - rank(…
Persistent Segment Tree (영속 세그): 시점별 스냅샷algorithm
정의 Persistent Segment Tree 는 매 갱신마다 이전 버전을 그대로 유지하면서 새 버전을 만드는 세그먼트 트리입니다. 각 버전은 루트 포인터 로 식별됩니다. 핵심…
Suffix Array (접미사 배열)algorithm
정의 Suffix Array (SA, 접미사 배열) 는 문자열 s 의 모든 접미사를 사전순 정렬한 인덱스 배열. SA[i] = 시작 위치 (0-indexed). 보통 LCP (L…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기