-
KDB 트리 알고리즘프로그래밍 기초/알고리즘 2021. 11. 30. 14:07
KDB 트리
B 트리를 다차원 검색 트리로 확장한 트리 자료구조이다.
KDB 트리는 노드의 키를 통해 분기하는 게 아니라 전체 영역을 쪼개가며 진행하게 된다.
KDB 트리에는 다음의 두 종류의 노드가 존재한다.
- 영역 노드 트리의 차원에 따라 노드가 가지는 공간을 표현하는 노드
- 키 노드 실제 키와 소속된 페이지 번호를 가지는 노드
이때, k 차원의 키를 사용하는 영역 노드는 다음과 같이 표현된다.
(<min0, max0>, <min1, max1>, ... , <mink-1, maxk-1>)
※ KDB 트리의 모든 내부 노드는 영역 노드이며, 모든 리프 노드는 키 노드이다.
KD 트리에서의 검색
KD 트리의 검색은 다음의 순서를 따른다.
- 루트 노드에서부터 검색하려는 키가 포함된 영역을 가지는 영역 노드를 따라 진행한다.
- 리프 노드에 도달한 경우 리프 노드에 검색하려는 키가 존재하는지 확인한다.
- 키가 존재하는 경우 해당 페이지에서 정보를 가져오고 종료한다.
- 키가 존재하지 않는 경우 키가 존재하지 않는 것으로 간주하고 종료한다.
KDB 트리에서의 삽입과 삭제
KDB 트리의 삽입과 삭제는 B 트리와 동일한 방식으로 진행되나 리프 노드에서 오버 플로우 또는 언더 플로우가 발생했을 때 영역 노드가 영향을 받으며 영역의 모양이 변경되는 점이 다르다.
※ 분할 또는 병합이 될 때 문제가 됐던 영역의 기준을 부모 노드의 전체 영역으로 확장하여 처리한다.
NadanKim/Algorithm: 알고리즘 학습 및 예제 코드 작성을 위한 저장소 (github.com)