토픽 52 / 66·확률적 자료구조
KD-Tree (K-Dimensional Tree)
KD-Tree (K-Dimensional Tree)
k차원 공간의 점들을 저장하는 이진 탐색 트리로, 각 레벨에서 다른 차원으로 분할하여 최근접 이웃 검색과 범위 쿼리를 효율적으로 수행
목적: k차원 공간 탐색, 최근접 이웃 검색(KNN), 범위 쿼리, 고차원 인덱싱
특징: 이진 트리, 차원별 순환 분할, 공간 분할, 균형 가능
구조: 레벨 0 = x축 분할, 레벨 1 = y축 분할, ..., 레벨 k = x축 분할(순환)
동작
- •삽입: 현재 차원(depth % k)으로 비교 → 재귀적 삽입
- •검색: 현재 차원 비교 → 탐색 가지치기
- •최근접 이웃(KNN): 우선순위 큐 + 백트래킹, 거리 기반 가지치기
시간 복잡도
- •구축: O(n log n) - 중앙값 분할
- •검색: 평균 O(log n), 최악 O(n)
- •KNN: 평균 O(log n), 고차원에서 O(n)
공간 복잡도: O(n)
장점: 저차원(2-3D)에서 빠른 KNN, 범위 쿼리 효율, 동적 삽입
단점: 고차원의 저주(차원↑ 성능↓), 불균형 가능, 삭제 복잡
적용사례: 최근접 이웃 검색, 이미지 유사도, 머신러닝(KNN), 로봇 경로 계획, 컴퓨터 비전
비교: KD-Tree(k차원/저차원) vs Ball Tree(고차원/메트릭) vs Quadtree(2D/4분할)
연관: KNN, 최근접 이웃, 공간 분할, 범위 쿼리