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

Order Statistics Tree (OST): rank/select 지원 BST

· 수정 · 📖 약 1분 · 142자/단어 #algorithm #data-structure #tree #bst
Order Statistics Tree, OST, 순위 통계 트리

정의

Order Statistics Tree 는 각 노드에 서브트리 크기 를 추가로 저장한 균형 BST 입니다. 두 가지 새 연산을 O(log N) 에 지원합니다.

  • rank(x): x 보다 작은 원소 수
  • select(k): k 번째 원소 (0-indexed)

구조

struct Node {
    int key, size;
    Node *l, *r;
};

int sz(Node* n) { return n ? n->size : 0; }

Node* select(Node* r, int k) {
    if (!r) return nullptr;
    int lsz = sz(r->l);
    if (k == lsz) return r;
    if (k < lsz) return select(r->l, k);
    return select(r->r, k - lsz - 1);
}

int rank(Node* r, int key) {
    if (!r) return 0;
    if (key <= r->key) return rank(r->l, key);
    return sz(r->l) + 1 + rank(r->r, key);
}

일반 BST 삽입/삭제 시 size 를 함께 갱신합니다.

실전 구현

  • C++ policy tree (GNU): __gnu_pbds::tree with tree_order_statistics_node_update
  • Rust: BTreeSet 은 미지원, 별도 구현 필요
  • Python: SortedList (sortedcontainers) 가 유사

참고

이 글의 용어 (3개)
BBST (Splay Tree, Treap)algorithm
정의 BBST (Balanced Binary Search Tree) 는 균형이 amortized / expected 로 보장되는 이진 탐색 트리. PS 에서는 split / me…
Binary Search Tree (BST): 정렬된 이진 트리algorithm
정의 Binary Search Tree (BST) 는 각 노드가 다음을 만족하는 이진 트리입니다. - 왼쪽 서브트리의 모든 키 < 노드 키 - 오른쪽 서브트리의 모든 키 > 노드…
Fenwick Tree (Binary Indexed Tree): 구간 합 O(log N)algorithm
정의 Fenwick Tree (또는 BIT, Binary Indexed Tree) 는 배열의 prefix sum 을 O(log N) 에 갱신·조회 하는 자료구조입니다. Peter…

💬 댓글

사이트 검색 / 명령어

검색

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