정렬 맵을 탐색 트리로 구현하면 O(log n) 시간복잡도를 갖는다
이진 트리로 위치 p에 (키, 값)이 저장되어 있다 = 의사 결정 트리
이진 탐색 트리를 중위 순회하면 오름차순으로 키가 정렬된 순서로 노드를 방문한다
O(n)에 전체 트리를 순회하며 특정 위치에서 순회할 수 있다
첫번째 노드 = 루트에서 왼쪽 자식을 따라 내려간 리프 노드
마지막 노드 = 루트에서 오른쪽 자식으로 따라 내려간 리프 노드
이전 노드
i. 왼쪽 자식이 있는 경우 왼쪽 부트리에서 오른쪽 자식을 따라 내려간 리프노드
ii. 왼쪽 자식이 없는 경우 부모를 따라 올라가다 내가 포함된 오른쪽 자식을 갖는 첫번째 조상 노드
다음 노드
i. 오른쪽 자식이 있는 경우 오른쪽 부트리의 루트에서 왼쪽 자식을 따라 내려간 리프노드
ii. 오른쪽 자식이 없는 경우 부모를 따라 올라가다 내가 포함된 왼쪽 자식을 갖는 첫번째 조상 노드
이진 탐색 트리의 연산 시간복잡도 = O(h), 범위 탐색의 시간복잡도 = O(s+h) 이때 s = 범위 아이템 수
이진 탐색 트리이고 최악의 경우 높이가 O(log n)인 트리
높이-균형 속성을 만족하는 이진 탐색 트리
높이-균형 속성 : 각 노드에서 두 자식의 높이 차는 최대 1이다
AVL 트리 높이 : 높이 계산 시 자신을 포함해서 노드 수를 센다
n개 아이템을 갖고 있는 AVL 트리의 높이 : O(log n)
빈번한 연산이 이뤄지는 노드를 루트로 옮겨서 트리 균형을 맞추는 이진 탐색 트리
탐색/삽입/삭제 연산 최악의 경우 O(h) 시간 소요, 분할 분석 시 O(log n) 시간 소요
위치 p의 깊이가 d라면, d/2(내림) 번 zig-zig or zig-zag 연산
d가 홀수면 가장 위에서 1번 zig 연산. 따라서 스플레이 연산은 O(d) 시간이 소요
다중 탐색 트리 중 하나로 노드에 2-4개 키를 저장
다중 탐색 트리 : 내부 노드에 자식이 2개 이상 있는 탐색 트리
다중 탐색 트리가 순서 트리가 되려면 다음 성질을 만족해야한다
i. 내부 노드는 d-노드(자식이 d개인 순서 트리 노드)로 정의되며 d-1개 키를 저장
ii. 외부 노드는 데이터를 저장하지 않으며 정의 상 노드 역할만 하고 None으로 둠
iii. n개 아이템을 갖는 다중 탐색 트리는 n+1개의 외부 노드를 갖는다
시간복잡도 : O(log d), 이때 d = 노드의 자식 수
(2-4) 트리 = 다음 크기 속성과 깊이 속성을 만족하는 균형 다중 탐색 트리
높이 = O(log n)
탐색 시간 = O(log n)
노드에 사용할 맵 종류는 성능에 크게 영향을 못 미친다
키 k를 탐색 했을 때 키가 없어서 외부 노드에서 탐색이 종료되었다면 외부 노드의 부모 노드에 키 삽입
오버플로 발생 시 노드를 분할해서 크기 속성을 만족하도록 한다
블랙 깊이를 기준을 만족하도록 균형을 맞추는 이진 탐색 트리. (2-4)트리와 통치이다
속성:
i. 루트 속성 : 루트는 블랙이다
ii. 레드 속성 : 레드 노드의 부모/자식은 블랙이다
iii. 깊이 속성 : 자식이 없거나 하나인 노드는 블랙 싶이가 모두 같다
블랙 깊이 : 자신을 포함한 조상의 블랙 노드 수
트리 높이 : O(log n)
키 탐색을 했을 때 빈 부트리에 도달하면 리프 노드로 삽입한다 이때
a. 노드가 하나면 루트 노드이므로 블랙 노드로 삽입
b. 그 외는 레드 노드로 삽입
삽입으로 높이 속성은 만족하지만 레드 속성이 위배될 수 있다.
ie) 더블 레드
Case 1
Case 2
Case 3
대부분의 연산 O(log n) 보장
최대 장점 : 재구조화 연산 = O(1)
반면 AVL 트리, (2-4) 트리는 O(log n)의 구조 변경 필요
추가/삭제 연산 시
i. 탐색과 리컬러링 연산 : O(log n)
ii. 회전과 재구조화 연산 :O(1)