Macneils 포인트 외에도 ...
C ++ std::map
(적어도 AFAIK) 와 같은 표준 라이브러리 구현에서 널리 지원되지 않는 유용한 효율적인 작업이 있기 때문에 레드-블랙 트리가 더 유용 할 수 있습니다 . 레드-블랙 트리는 "분할"(나무를 둘로 자르고, 하나는 지정된 키보다 작은 키를 포함하고 다른 하나는 키를 포함)을 지원하고 "조인"(큰 키의 나무를 작은 나무와 결합)을 지원할 수 있습니다. 키)는 O (log n) 시간에 수행 할 수 있지만 표준 컨테이너 라이브러리에서 지원되는 경우 잘 숨겨져있는 것으로 보입니다.
그러나 "확장"데이터 구조가 일반적입니다. 간단한 예는 O (log n) 첨자를 지원하기 위해 거의 모든 트리 데이터 구조의 노드에 서브 트리 크기 정보를 추가하는 것입니다. 보다 복잡한 예에는 간격 트리가 포함됩니다.
데이터 구조를 확장한다는 아이디어를 얻으면 특정 응용 프로그램에 유용 할 수있는 많은 변형이 있으며 라이브러리로 사전 패키지로 제공되는 것은 거의 없습니다. 기존 표준 라이브러리 데이터 구조 (예 : 등 std::map
)는 소스 코드를 복사하고 직접 수정하는 것만으로는 기능을 보강 할 수 없습니다. 템플릿 매개 변수를 사용하여 기능을 보강 할 수는 없습니다.
물론 기능 보강 된 데이터 구조를 개발하려면 기본 기능 보강되지 않은 데이터 구조를 이해해야합니다.
삽입 / 삭제보다 검색을 더 많이 수행하고 분할 / 결합 작업이 필요하지 않은 경우 AVL 트리는 빨강-검정 트리보다 빠를 수 있습니다. 증강.