O(logN)
O(N)
= 모든 노드를 한번씩 확인해야 함
- 모든 노드는 Red 혹은 Black
- 루트 노드는 Black
- 모든 nill(leaf)노드는 Black
- Red 의 자녀들은 Black ( = Red 는 연속적으로 존재할 수 없다 )
- 임의의 노드에서 자손 nill 노드들까지 가는 경로들의 Black 수는 같다 ( 자기 자신은 카운트에서 제외 )
5a. 노드 x의 Black height
black 의 개수
(자기 자신 제외)5b. 색 바꾸기
부모
와 두 자녀
의 색을 바꿔도 5번 속성은 여전히 만족#4
, #5
를 위반해서 이들을 해결하려고 구조를 바꾸다보면, 자연스럽게 트리의 균형이 잡히게 된다.AVG | Worst | |
---|---|---|
Insert | O(logN) | O(logN) |
Delete | O(logN) | O(logN) |
Search | O(logN) | O(logN) |
RB | AVL | |
---|---|---|
Binary Search Tree | Yes | Yes |
삽입/삭제/검색 시간 복잡도 | wort case 에서도 O(longN) | wort case 에서도 O(longN) |
삽입/삭제 성능 | AVL 트리에 비해 빠름 | RB 트리에 비해 느림 |
검색 성능 | AVL 트리에 비해 느림 | RB 트리에 비해 빠름 |
균형 잡는 방식 | RB 트리 속성을 만족시키도록 | balance factor ∈ {-1, 0, 1} 되도록 |
응용 사례 | linux kernel 내부에서 사용, | dictionary, 한번 만들어 놓으면 삽입/삭제가 |
c++std::map 구현, etc... | 거의 없고 검색이 대부분인 상황에서 사용 |