Booil Jung

동적 균형 k-d 트리

k-d 트리(k-dimensional tree)는 점, 선, 다각형 등 다차원 공간 데이터를 효율적으로 저장하고 검색하기 위해 설계된 핵심적인 공간 분할 자료구조다. 특히 3차원 포인트 클라우드 데이터의 최근접 이웃 탐색(Nearest Neighbor Search)이나 범위 탐색(Range Search)과 같은 기하학적 질의를 처리하는 데 널리 사용된다. 그러나 전통적인 k-d 트리는 데이터셋이 변경되지 않는 정적(static) 환경에 최적화되어 있다. 자율주행, 로보틱스, 실시간 3D 스캐닝 등 현대적 응용 분야에서는 데이터가 지속적으로 추가되거나 삭제되는 동적(dynamic) 환경이 일반적이며, 이러한 환경에서 정적 k-d 트리는 심각한 성능 저하 문제를 드러낸다. 본 보고서는 동적 환경에서 k-d 트리의 균형을 유지하기 위한 근본적인 문제점을 분석하고, 이를 해결하기 위한 핵심 알고리즘들과 최신 연구 동향을 심층적으로 고찰한다.

k-d 트리는 k-차원 공간의 점들을 효율적으로 정리하기 위한 이진 트리 기반의 공간 분할 자료구조다.1 각 비-리프 노드(non-leaf node)는 하나의 k-차원 점과 함께 분할 축(splitting axis)을 가지며, 이 축에 수직인 초평면(hyperplane)을 통해 현재 공간을 두 개의 하위 공간(half-space)으로 나눈다.1 이 과정을 재귀적으로 반복하여 공간을 세밀하게 분할하는 계층적 구조를 형성한다.2

정적 k-d 트리의 표준적인 구축 과정은 다음과 같은 단계로 이루어진다.

  1. 분할 축 결정: 트리의 각 레벨에서 공간을 분할할 축을 선택한다. 가장 일반적인 방법은 데이터의 분산(variance)이 가장 큰 축을 선택하여 데이터가 넓게 퍼져 있는 방향으로 분할하는 것이다.3 이는 분할의 효율을 극대화하여 탐색 시 더 많은 영역을 가지치기(pruning)할 수 있도록 돕는다. 또 다른 간단한 방법은 x, y, z축을 순환(cycling)하며 차례대로 선택하는 것이다.1
  2. 분할 점(Pivot) 결정: 선택된 축을 기준으로 현재 노드에 속한 점들을 정렬하고, 그중 중간값(median)에 해당하는 점을 분할 점으로 선택한다. 이 분할 점은 현재 노드에 저장된다. 중간값을 분할 점으로 사용하는 것은 생성될 두 서브트리가 거의 같은 수의 점을 갖도록 보장하며, 이는 최종적으로 생성되는 트리가 균형 잡힌(balanced) 형태를 갖게 하는 핵심적인 단계다.4
  3. 재귀적 분할: 분할 점을 기준으로, 선택된 축의 좌표값이 분할 점보다 작은 점들은 왼쪽 서브트리로, 크거나 같은 점들은 오른쪽 서브트리로 보내어 두 개의 새로운 하위 집합을 만든다.3 이 두 하위 집합에 대해 다시 1단계부터의 과정을 재귀적으로 적용하여 트리를 완성한다.

중간값을 찾는 과정은 전체 점들을 정렬하는 $O(n \log n)$ 알고리즘을 사용하거나, 더 효율적인 $O(n)$ 시간 복잡도를 갖는 median-of-medians 알고리즘을 사용할 수 있다.1 따라서 $n$개의 점으로 균형 잡힌 정적 k-d 트리를 구축하는 전체 시간 복잡도는 최적의 경우 $O(n \log n)$이 된다.1

잘 구축된 k-d 트리는 다양한 공간 질의를 효율적으로 처리할 수 있다.

정적 환경에서의 뛰어난 성능과 달리, k-d 트리는 점의 삽입과 삭제가 빈번한 동적 환경에서 심각한 문제에 직면한다.

k-d 트리의 동적 불균형 문제를 해결하기 위해, 트리 회전을 사용하지 않는 다양한 재균형 알고리즘이 제안되었다. 이들은 크게 부분 재구축 기법, 확률적 기법, 그리고 다른 자료구조와의 하이브리드 접근법으로 분류할 수 있다.

Scapegoat 트리는 동적 균형을 유지하기 위한 우아하고 실용적인 해법을 제시한다. AVL 트리나 Red-Black 트리처럼 모든 노드에 색상이나 가중치 같은 추가적인 균형 정보를 저장하는 대신, 전역 변수 몇 개와 ‘게으른(lazy)’ 재균형 전략을 사용하여 효율성을 달성한다.13

Scapegoat 트리가 결정론적 규칙에 기반하여 최악의 경우 성능을 보장하는 반면, 무작위 k-d 트리는 확률적 기법을 도입하여 ‘평균적으로’ 또는 ‘기대되는’ 성능을 보장하는 데 초점을 맞춘다. 이는 특정 데이터 입력 순서나 분포로 인해 발생하는 최악의 성능 시나리오를 효과적으로 회피하는 전략이다.

k-d 트리의 동적 균형 문제를 해결하기 위한 또 다른 접근법은 k-d 트리의 공간 분할 능력과 다른 자료구조의 장점을 결합하는 것이다. 특히 B-트리 계열과의 결합은 대용량 데이터베이스나 높은 업데이트 처리량이 요구되는 시스템 환경에서 주목받았다.

이러한 하이브리드 접근법들은 ‘최고의’ 동적 k-d 트리란 존재하지 않으며, 애플리케이션의 특정 제약 조건(메모리, I/O, 업데이트 빈도, 동시성 요구사항)에 따라 최적의 구조가 달라짐을 명확히 보여준다.

동적 포인트 클라우드를 처리하기 위한 자료구조 선택 시, k-d 트리 외에도 여러 대안이 존재한다. 각 자료구조는 공간을 분할하고 관리하는 방식에 있어 고유한 철학과 장단점을 가지므로, 애플리케이션의 요구사항에 맞는 최적의 구조를 선택하기 위해서는 이들 간의 비교 분석이 필수적이다.

k-d 트리와 Octree는 포인트 클라우드 인덱싱에 가장 널리 사용되는 두 가지 공간 분할 트리지만, 근본적인 분할 전략에서 차이를 보인다.

R-트리는 k-d 트리와 함께 다차원 인덱싱의 양대 산맥으로 불리며, 특히 동적 데이터베이스 시스템에서 널리 사용된다.

어떤 단일 자료구조도 모든 시나리오에서 최적의 성능을 보장할 수 없다는 인식 하에, 여러 구조의 장점을 결합하여 단점을 보완하려는 하이브리드(hybrid) 방식이 활발히 연구되고 있다.

이러한 하이브리드 구조의 등장은 특정 애플리케이션의 요구사항에 맞춰 자료구조를 ‘설계’하고 ‘조합’하는 방향으로 연구가 발전하고 있음을 보여준다.

아래 표는 개발자와 연구자가 자신의 애플리케이션 요구사항(데이터의 정적/동적 여부, 데이터 타입, 성능 우선순위 등)에 가장 적합한 자료구조를 신속하게 판단할 수 있도록 핵심적인 트레이드오프를 요약하여 정리한 것이다.

자료구조 공간 분할 방식 균형 유지 동적 업데이트 효율성 저장 데이터 주요 장/단점
k-d Tree 데이터 기반 분할 (겹침 없음) 정적 구축 시 보장, 동적 시 어려움 (별도 알고리즘 필요) 낮음 (재균형 비용 높음) 점(Point) 장: 구현 용이, 균일 분포 데이터에 효율적. 단: 동적 데이터에 취약, 차원의 저주.
Octree 고정 공간 분할 (겹침 없음) 데이터 분포에 따라 불균형 발생 가능 중간 (구조가 고정되어 삽입/삭제 용이) 점(Point) 장: 구축 빠름, 구조 단순. 단: 불균일 데이터에 불균형 심화, 메모리 비효율.
R-Tree / R*-Tree 데이터 기반 분할 (겹침 허용) B-트리 기반으로 항상 균형 유지 높음 영역(Region) 및 점 장: 동적 데이터에 매우 강건, 영역 데이터 저장 가능. 단: 노드 중첩으로 탐색 비효율 가능(R*-tree로 개선).
Ball Tree 데이터 기반 분할 (겹침 허용) 구축 시 균형 보장 중간 (재균형 가능) 점(Point) 장: 고차원 데이터 및 비유클리드 거리 척도에 강함. 단: k-d 트리보다 노드당 계산 비용 높음.

데이터의 규모가 폭발적으로 증가하고 멀티코어 프로세서, PIM(Processing-in-Memory)과 같은 새로운 하드웨어 아키텍처가 등장함에 따라, k-d 트리 역시 이러한 고성능 컴퓨팅 환경에 맞춰 진화하고 있다. 연구의 초점은 알고리즘의 병렬성을 극대화하고 메모리 계층 구조 및 데이터 이동 비용을 최적화하는 방향으로 이동하고 있다.

멀티코어 프로세서의 보편화는 k-d 트리의 구축 및 업데이트와 같은 순차적인 연산을 병렬화하여 대규모 데이터셋을 고속으로 처리하려는 강력한 동기를 부여했다.23 Pkd-tree는 이러한 요구에 부응하여 높은 병렬성과 캐시 효율성을 동시에 달성하도록 설계된 병렬 k-d 트리 구현체다.

아래 표는 병렬 컴퓨팅 전문가에게 가장 중요한 성능 지표들을 명시적으로 제시함으로써 Pkd-tree 알고리즘의 이론적 우수성을 정량적으로 보여준다. 이는 알고리즘의 확장성과 효율성을 평가하는 핵심적인 근거가 된다.

연산 Work (순차 실행 시간) Span (병렬 실행 시간) Cache Complexity
구축 (n개 점) $O(n \log n)$ $O(\log^2 n)$ (높은 확률) $O(\frac{n}{B} \log_M n)$
배치 업데이트 (m개 점) $O(m \log^2 n)$ (상각) $O(\log^2 n)$ (높은 확률) $O(\frac{m}{B}(\log(n/m) + \log_M n))$ (상각)

주: $n$은 트리 크기, $m$은 배치 크기, $M$은 캐시 크기, $B$는 캐시 라인 크기를 의미한다.

데이터 집약적인 k-d 트리 연산의 성능은 종종 CPU의 연산 속도가 아닌, CPU와 메인 메모리 간의 데이터 전송 속도에 의해 제한된다. 이 ‘메모리 월(memory wall)’ 문제는 k-d 트리처럼 포인터 추적(pointer chasing)이 많은 자료구조에서 특히 심각하다. PIM(Processing-in-Memory)은 메모리 칩 내부에 연산 유닛을 통합하여 데이터 이동을 최소화함으로써 이 병목을 근본적으로 해결하려는 새로운 하드웨어 패러다임이다.30

본 보고서는 포인트 클라우드 처리를 위한 동적 균형 k-d 트리의 근본적인 문제점부터 시작하여, 이를 해결하기 위한 고전적 및 현대적 알고리즘, 그리고 고성능 컴퓨팅 환경으로의 진화까지 다각도로 심층 분석했다. 분석을 통해 도출된 종합적인 결론과 향후 연구 방향은 다음과 같다.

분석 결과, 모든 시나리오에 적용 가능한 단일 최적해는 존재하지 않으며, 각 동적 균형 유지 기법은 고유한 장점과 트레이드오프를 가진다는 점이 명확해졌다.

자율주행 자동차의 LiDAR 센서, 로보틱스의 실시간 환경 인식, 3D 스캐너를 이용한 디지털 트윈 구축, 가상/증강 현실(VR/AR) 등 수많은 현대 기술 분야에서 포인트 클라우드 데이터는 정적인 스냅샷이 아니라, 실시간으로 생성되고 변화하는 동적인 스트림 형태를 띤다.31 이러한 동적 포인트 클라우드로부터 의미 있는 정보를 추출하기 위해서는 고속의 최근접 이웃 탐색, 충돌 감지를 위한 범위 탐색, 객체 추적을 위한 움직임 추정 등이 필수적이다.31 동적 균형 k-d 트리는 이러한 핵심적인 공간 질의 연산을 효율적으로 지원하는 기반 기술로서, 해당 응용 분야 전체의 성능과 실시간성을 좌우하는 매우 중요한 구성 요소라 할 수 있다.

동적 k-d 트리에 대한 연구는 앞으로도 다음과 같은 방향으로 더욱 발전할 것으로 전망된다.

  1. k-d tree - Wikipedia, 8월 1, 2025에 액세스, https://en.wikipedia.org/wiki/K-d_tree
  2. Point cloud :: KdTree와 KNN - 당황했습니까 휴먼? - 티스토리, 8월 1, 2025에 액세스, https://ropiens.tistory.com/128
  3. [영상처리] 이미지매칭(3) - Nearest Neighbor Search (with kd-tree) - LTNS - 티스토리, 8월 1, 2025에 액세스, https://kimyo-s.tistory.com/54
  4. The Ultimate Guide to K-D Trees in ML - Number Analytics, 8월 1, 2025에 액세스, https://www.numberanalytics.com/blog/ultimate-guide-to-k-d-trees-in-ml
  5. Introduction to K-D Trees Baeldung on Computer Science, 8월 1, 2025에 액세스, https://www.baeldung.com/cs/k-d-trees
  6. Search and Insertion in K Dimensional tree - GeeksforGeeks, 8월 1, 2025에 액세스, https://www.geeksforgeeks.org/dsa/search-and-insertion-in-k-dimensional-tree/
  7. Balancing KD-Tree: Which approach is more efficient? - Stack Overflow, 8월 1, 2025에 액세스, https://stackoverflow.com/questions/17021379/balancing-kd-tree-which-approach-is-more-efficient
  8. User:Duyn/kd-tree Tutorial - Robowiki, 8월 1, 2025에 액세스, https://robowiki.net/wiki/User:Duyn/kd-tree_Tutorial
  9. Optimizing Search Strategies in k-d Trees - Stanford InfoLab, 8월 1, 2025에 액세스, http://infolab.stanford.edu/~nsample/pubs/samplehaines.pdf
  10. sklearn.neighbors.KDTree complexity for building is not O(n(k+log(n)) #7687 - GitHub, 8월 1, 2025에 액세스, https://github.com/scikit-learn/scikit-learn/issues/7687
  11. Deletion in K Dimensional Tree - GeeksforGeeks, 8월 1, 2025에 액세스, https://www.geeksforgeeks.org/dsa/deletion-in-k-dimensional-tree/
  12. Bkd-Tree: A Dynamic Scalable kd-Tree - Duke Computer Science, 8월 1, 2025에 액세스, https://users.cs.duke.edu/~pankaj/publications/papers/bkd-sstd.pdf
  13. Scapegoat Trees - akira.ruc.dk, 8월 1, 2025에 액세스, http://webhotel4.ruc.dk/~keld/teaching/algoritmedesign_f03/Artikler/03/Galperin93.pdf
  14. Scapegoat tree - Wikipedia, 8월 1, 2025에 액세스, https://en.wikipedia.org/wiki/Scapegoat_tree
  15. 8 Scapegoat Trees - Open Data Structures, 8월 1, 2025에 액세스, https://opendatastructures.org/newhtml/ods/latex/scapegoat.html
  16. Scapegoat tree - OpenGenus IQ, 8월 1, 2025에 액세스, https://iq.opengenus.org/scapegoat-tree/
  17. Galperin93 Scapegoat Trees PDF Algorithms And Data Structures Theoretical Computer Science - Scribd, 8월 1, 2025에 액세스, https://www.scribd.com/document/473882781/Galperin93-Scapegoat-Trees
  18. Mastering Scapegoat Trees in Data Structures - Number Analytics, 8월 1, 2025에 액세스, https://www.numberanalytics.com/blog/ultimate-guide-scapegoat-tree-data-structures
  19. (PDF) Updating Relaxed K-d Trees - ResearchGate, 8월 1, 2025에 액세스, https://www.researchgate.net/publication/234784644_Updating_Relaxed_K-d_Trees
  20. Optimised KD-trees for fast image descriptor matching, 8월 1, 2025에 액세스, https://users.cecs.anu.edu.au/~hartley/Papers/PDF/SilpaAnan:CVPR08.pdf
  21. [PDF] The K-D-B-tree: a search structure for large multidimensional …, 8월 1, 2025에 액세스, https://www.semanticscholar.org/paper/The-K-D-B-tree%3A-a-search-structure-for-large-Robinson/541d44c37b6072a5e8073233ff89454be153e40d
  22. Parallel Batch-Dynamic kd-trees - arXiv, 8월 1, 2025에 액세스, https://arxiv.org/pdf/2112.06188
  23. Parallel kd-tree with Batch Updates - Computer Science and …, 8월 1, 2025에 액세스, https://www.cs.ucr.edu/~ygu/papers/SIGMOD25/kdtree.pdf
  24. A Hybrid Spatial Indexing Structure of Massive Point Cloud Based …, 8월 1, 2025에 액세스, https://www.mdpi.com/2076-3417/11/20/9581
  25. Efficient Radius Neighbor Search in Three-dimensional Point Clouds - Jens Behley, 8월 1, 2025에 액세스, https://jbehley.github.io/papers/behley2015icra.pdf
  26. What is the difference between a KD-tree and a R-tree? - Stack Overflow, 8월 1, 2025에 액세스, https://stackoverflow.com/questions/4326332/what-is-the-difference-between-a-kd-tree-and-a-r-tree
  27. A dive into spatial search algorithms : r/programming - Reddit, 8월 1, 2025에 액세스, https://www.reddit.com/r/programming/comments/67vqf3/a_dive_into_spatial_search_algorithms/
  28. Fast kd-tree Construction with an Adaptive Error-Bounded Heuristic - ResearchGate, 8월 1, 2025에 액세스, https://www.researchgate.net/publication/224759149_Fast_kd-tree_Construction_with_an_Adaptive_Error-Bounded_Heuristic
  29. Parallel kd-tree with Batch Updates - Computer Science and Engineering, 8월 1, 2025에 액세스, https://www.cs.ucr.edu/~zmen002/files/publication/pkd_full.pdf
  30. Optimal Batch-Dynamic kd-trees for Processing … - Parallel Data Lab, 8월 1, 2025에 액세스, https://www.pdl.cmu.edu/PDL-FTP/associated/yzhao-SPAA-25.pdf
  31. NTIS > 연구성과 상세검색 > 기술요약정보, 8월 1, 2025에 액세스, https://www.ntis.go.kr/outcomes/popup/srchTotlTechInfo.do?cmd=get_contents&rstId=TAI-2021-01311895031&returnURI=aHR0cHM6Ly93d3cubnRpcy5nby5rci9UaFNlYXJjaFRvdGFsTGlzdC5kbz9zZWFyY2hXb3JkPSVFRCU4MSVCNCVFQiU5RCVCQyVFQyU5QSVCMCVFQiU5MyU5Qw==&pageCode=TH_TOTAL_TECHTRAN_RST_DTL
  32. [초록 읽기] PointNet (2017) - scone’s data - 티스토리, 8월 1, 2025에 액세스, https://callmescone.tistory.com/243
  33. DPCD: A Quality Assessment Database for Dynamic Point Clouds - arXiv, 8월 1, 2025에 액세스, https://arxiv.org/html/2505.12431v1
  34. A Dynamic 3D Point Cloud Dataset for Immersive Applications, 8월 1, 2025에 액세스, https://people.cs.nycu.edu.tw/~chuang/pubs/pdf/2023mmsys.pdf
  35. GPU상에서 동작하는 Ray Tracing을 위한 효과적인 k-D tree 탐색 알고리즘 - RISS 검색 - 국내학술지논문 상세보기, 8월 1, 2025에 액세스, https://m.riss.kr/search/detail/DetailView.do?p_mat_type=1a0202e37d52c72d&control_no=a86619b2baf3d37effe0bdc3ef48d419
  36. 동적 메쉬 생성을 위한 동적 포인트 클라우드의 효율적 변환 방법/최이현, 정종범, 류은석 - 미디어공학회, 8월 1, 2025에 액세스, https://www.kibme.org/resources/journal/20231010164521840.pdf
  37. Three-Dimensional Point Cloud Applications, Datasets, and Compression Methodologies for Remote Sensing: A Meta-Survey - MDPI, 8월 1, 2025에 액세스, https://www.mdpi.com/1424-8220/25/6/1660