이 답변은 내 의견 중 일부를 질문에 결합하고 확장합니다.
레드 블랙 트리의 하위 범위 작업은 최악의 경우 O (log n) 시간에 수행 할 수 있습니다. 여기서 n은 원래 트리의 요소 수입니다. 결과 트리는 원래 트리와 일부 노드를 공유하므로이 방법은 트리를 변경할 수없는 경우 (또는 트리는 변경 가능하지만 원래 트리는 더 이상 필요하지 않은 경우)에만 적합합니다.
하위 범위 작업은 두 개의 분할 작업으로 구현할 수 있습니다. 여기서 분할 연산은 레드-블랙 트리 T와 키 x를 취하여 L이 x보다 작은 T의 모든 요소와 R이 x보다 큰 T의 모든 요소로 구성되도록 두 개의 트리 L과 R을 생성합니다. 따라서 우리의 목표는 현재 최악의 O (log n) 시간에 레드 블랙 트리에서 분할 작업을 구현하는 것입니다.
O (log n) 시간에 적색 흑색 트리에서 분할 작업을 어떻게 수행합니까? 잘 알려진 방법이 있다는 것이 밝혀졌습니다. (나는 그것을 알지 못했지만, 데이터 구조의 전문가는 생각하지 않습니다.)이 고려 에 가입 L의 모든 값이 R의 모든 값보다 작도록 두 나무의 L과 R을 받아 구성된 트리를 생성하는 작업을, 모든 결합 연산은 최악의 시간 O (| r L -r R | +1) 에서 구현 될 수 있으며 , 여기서 r L 및 r RL과 R의 순위 (즉, 뿌리에서 각 잎까지의 경로에있는 검은 노드의 수)입니다. 분할 연산은 결합 연산 O (log n) 시간을 사용하여 구현 될 수 있으며, 텔레 스코핑 합계를 고려하여 총 최악의 시간은 여전히 O (log n)입니다.
Tarjan의 책 [Tar83]의 섹션 4.1과 4.2는 최악의 시간 O (log n)에서 적-검정 나무에 대한 조인 및 분할 작업을 구현하는 방법을 설명합니다. 이러한 구현은 원래 트리를 파괴하지만 노드를 수정하는 대신 노드를 복사하여 변경 불가능한 기능적 구현으로 쉽게 변환 할 수 있습니다.
참고로, Objective Caml 의 Set 및 Map 모듈은 (불변의) 균형 이진 검색 트리에 대한 다른 표준 작업뿐만 아니라 분할 작업도 제공합니다. 레드-블랙 트리를 사용하지는 않지만 (왼쪽 높이와 오른쪽 높이가 최대 2만큼 다르다는 제약이있는 균형 이진 검색 트리를 사용하지만) 구현을 살펴 보는 것도 유용 할 수 있습니다. 다음은 Set 모듈의 구현입니다 .
참고 문헌
[Tar83] Robert Endre Tarjan. 데이터 구조 및 네트워크 알고리즘 . 응용 수학에서 CBMS-NSF 지역 회의 시리즈 44 권 , SIAM, 1983.