Booil Jung

Octree와 KD-Tree의 비교

현대 컴퓨팅 기술이 발전함에 따라 3차원 컴퓨터 그래픽스, 머신러닝, 로보틱스, 지리정보시스템(GIS) 등 다양한 핵심 분야에서 대규모 다차원 데이터를 효율적으로 관리하고 질의하는 능력은 기술적 우위를 결정하는 중요한 요소가 되었다.1 이러한 대용량 데이터 집합 내에서 특정 조건을 만족하는 데이터를 신속하게 찾아내기 위해 공간 분할(Spatial Partitioning) 자료구조가 필수적으로 사용된다.

본 보고서는 가장 널리 사용되는 두 공간 분할 자료구조인 Octree와 KD-Tree에 대한 심층적인 비교 분석을 제공한다.5 이 두 자료구조는 공간을 계층적으로 분할하여 탐색 범위를 효과적으로 줄인다는 공통점을 가지지만, 공간을 나누는 근본적인 철학과 그로 인해 파생되는 구조적 특성에서 명확한 차이를 보인다.

본 보고서의 목적은 Octree와 KD-Tree의 기본 원리부터 시작하여, 구조적 차이점, 데이터 분포에 따른 균형성, 핵심 연산(최근접 이웃 탐색, 범위 탐색)의 성능, 고차원으로의 확장성, 그리고 실제 적용 분야별 적합성에 이르기까지 모든 측면을 포괄적이고 심도 있게 비교 분석하는 것이다. 이를 통해 개발자와 연구자가 특정 응용 시나리오에 가장 적합한 자료구조를 정보에 입각하여 선택할 수 있도록 명확하고 실용적인 가이드라인을 제공하고자 한다.

Octree와 KD-Tree의 모든 특성을 결정짓는 가장 근본적인 차이는 ‘어떻게 공간을 나누는가’에 있다. 이 장에서는 두 자료구조의 분할 방식과 그로 인해 형성되는 구조적 특징을 탐구한다.

Octree는 3차원 공간을 재귀적으로 8개의 동일한 정육면체(Octant)로 분할하는 트리 자료구조로 정의된다.1 이는 2차원 공간에서의 Quadtree를 3차원으로 자연스럽게 확장한 개념으로 볼 수 있으며 1, 각 내부 노드는 정의상 정확히 8개의 자식 노드를 가진다.1

Octree의 핵심 철학은 데이터의 분포와 무관하게 공간 그 자체를 균등하게 분할하는 데 있다.7 분할은 현재 노드가 나타내는 정육면체 공간의 각 축(x, y, z)의 중심을 지나는 세 개의 축-정렬(axis-aligned) 평면을 통해 동시에 이루어진다. 그 결과로 생성되는 8개의 자식 노드, 즉 옥턴트(octant) 또는 셀(cell)은 모두 동일한 크기와 형태(정육면체)를 갖게 된다.7 이러한 분할 방식 때문에 Octree의 구조는 데이터의 위치가 아닌, 오직 공간의 기하학적 구조에 의해서만 결정된다.

분할 과정에서 각 노드는 포함하는 데이터에 따라 세 가지 상태 중 하나로 분류될 수 있다: ‘비어있음(white, empty)’, ‘가득 참(black, full)’, 또는 ‘부분적으로 채워짐(grey, partially filled)’. 재귀적 분할은 ‘부분적으로 채워짐’ 상태인 회색(grey) 노드에 대해서만 수행되며, 미리 정해진 최대 깊이에 도달하거나 셀 내부에 포함된 데이터의 수가 특정 임계값 이하로 줄어드는 등의 종료 조건이 만족될 때까지 계속된다.7 수학적으로 루트 노드가 전체 경계 상자(Bounding Box)

B를 나타낼 때, 내부 노드 v가 대표하는 영역 Bv는 8개의 자식 노드 vi에 의해 각각 $B_{v_i}$로 분할되는 재귀적 관계로 표현될 수 있다.2

KD-Tree(K-Dimensional Tree)는 K-차원 공간에 분포하는 점들을 효율적으로 조직화하기 위한 이진 공간 분할(Binary Space Partitioning, BSP) 트리이다.11 각 노드는 하나의 K-차원 점을 나타내며, 리프(leaf)가 아닌 모든 내부 노드는 공간을 두 개의 하위 공간(half-space)으로 나누는 분할 초평면(splitting hyperplane)을 암시적으로 생성한다.11

Octree와 극명한 대조를 이루는 KD-Tree의 핵심 특징은 분할 방식이 전적으로 데이터의 분포에 의존적이라는 점이다. 이 적응적 분할은 두 가지 주요 원칙에 따라 이루어진다.

첫째, 축 순환(Axis Cycling) 원칙이다. 분할은 한 번에 하나의 축을 따라서만 이루어지며, 트리의 깊이(depth)가 깊어짐에 따라 분할 기준이 되는 축이 순환적으로 변경된다. 예를 들어, 3차원 KD-Tree의 경우, 루트 노드(깊이 0)는 x축을 기준으로, 그 자식 노드들(깊이 1)은 y축을, 손자 노드들(깊이 2)은 z축을 기준으로 공간을 분할하고, 그 다음 레벨에서는 다시 x축으로 돌아와 분할을 계속한다.11

둘째, 중앙값 기반 분할(Median Split) 원칙이다. 가장 보편적인 KD-Tree 구축 방식에서는 현재 노드에 속한 점들을 선택된 분할 축의 좌표값을 기준으로 정렬한 뒤, 그 중앙값(median)을 분할점으로 선택한다.14 이 중앙값에 해당하는 점이 현재 노드에 저장되며, 이 점을 지나는 축-정렬 초평면을 기준으로 나머지 점들은 두 개의 그룹으로 나뉜다. 분할점보다 작은 값을 가진 점들은 왼쪽 자식 서브트리를, 크거나 같은 값을 가진 점들은 오른쪽 자식 서브트리를 구성하게 된다.11

이러한 분할 철학의 근본적인 차이는 두 트리의 모든 장단점을 파생시키는 원천이다. Octree는 ‘공간’ 자체를 균등하고 예측 가능하게 나누는 데 초점을 맞추므로, 분할 경계는 데이터의 존재 여부와 무관하게 미리 정해져 있다. 반면, KD-Tree는 ‘데이터’를 (점의 개수 기준으로) 균등하게 나누는 데 초점을 맞추므로, 분할 경계는 전적으로 해당 노드에 포함된 데이터의 통계적 분포(중앙값)에 의해 결정된다. 결과적으로 Octree는 공간의 기하학적 구조를, KD-Tree는 데이터 집합의 통계적 구조를 트리에 반영한다고 해석할 수 있다. Octree의 균등 분할은 셀 모양의 예측 가능성(항상 정육면체)을 보장하지만 데이터 밀도 변화에 둔감하게 만들고, KD-Tree의 데이터 적응적 분할은 데이터 개수 측면에서 균형을 맞추려 하지만 예측 불가능한 모양의 셀(높은 종횡비)을 생성할 수 있다. 이 점은 이후 장에서 논의될 성능 차이를 분석하는 핵심 근거가 된다.

특징 (Feature) Octree KD-Tree
주요 차원 (Primary Dimension) 3차원 (2D는 Quadtree) 1 K-차원 11
트리 유형 (Tree Type) 8진 트리 (Octal Tree) 1 이진 트리 (Binary Tree) 11
자식 노드 수 (Children per Node) 8개 1 2개 3
분할 방식 (Partitioning Method) 공간 중심, 균등 분할 7 데이터 중심, 적응적 분할 11
분할 단위 (Partitioning Unit) 3개의 축-정렬 평면 동시 사용 7 1개의 축-정렬 초평면 순차 사용 14
셀 형태 (Cell Shape) 정육면체 (Cubic) 17 직사각형/초직육면체 (High Aspect Ratio 가능) 17
데이터 의존성 (Data Dependency) 낮음 (구조가 데이터 분포에 무관) 높음 (구조가 데이터 분포에 의해 결정)

1장에서 살펴본 분할 방식의 차이는 데이터의 분포에 따라 실제 트리의 구조, 균형성, 그리고 메모리 효율성에 지대한 영향을 미친다. 이 장에서는 이러한 영향들을 심층적으로 분석한다.

데이터 분포의 균일성은 두 트리의 구조적 안정성에 서로 다른 방식으로 영향을 준다.

Octree의 경우, 데이터가 특정 지역에 밀집(clustered)하거나 편향(skewed)된 분포를 보일 때 심각한 불균형 문제가 발생한다. 데이터가 밀집된 지역에서는 분할이 반복적으로 일어나 트리가 매우 깊어지는 반면, 데이터가 희소하거나 존재하지 않는 넓은 공간은 몇 단계의 분할만 거친 채 거대한 리프 노드로 남게 된다. 이는 트리의 특정 가지가 비정상적으로 길어지는 구조적 불균형을 초래하며, 밀집 지역 내에서의 탐색 성능을 저하시키는 주요 원인이 된다.5

반면 KD-Tree는 데이터 분포에 더 유연하게 적응하지만, 다른 종류의 불균형 문제에 직면한다.

“균형 잡힌 트리”라는 용어는 Octree와 KD-Tree에서 서로 다른 의미를 내포하며, 이는 성능에 상반된 영향을 미친다. Octree에서의 균형은 주로 기하학적 균형을 의미한다. 즉, 데이터 분포가 균일할 때 모든 리프 노드가 비슷한 크기(부피)를 갖게 되어 구조적으로 안정된다. 반면, KD-Tree에서의 균형은 데이터적 균형을 의미하며, 중앙값 분할을 통해 모든 리프 노드가 비슷한 수의 데이터를 포함하도록 보장한다.

이러한 ‘균형’의 다의성은 탐색 성능에 직접적인 영향을 미친다. Octree의 기하학적 균형과 예측 가능한 정육면체 셀은 특정 반경 내의 모든 이웃을 찾는 범위 탐색(Range Search)에 유리하다. 탐색 영역과 겹치는 셀의 개수를 예측하고 제한하기가 용이하기 때문이다. 반대로, KD-Tree의 데이터적 균형은 각 분할 단계에서 탐색 대상 데이터의 수를 절반으로 줄여나가므로, 가장 가까운 하나의 이웃을 찾는 최근접 이웃 탐색(Nearest Neighbor Search)에 더 유리하다.

트리의 깊이와 메모리 사용량 측면에서도 두 구조는 뚜렷한 차이를 보인다.

이론적인 구조의 차이가 실제 연산 성능에서 어떻게 발현되는지, 구체적인 알고리즘 분석과 실증적인 벤치마크 데이터를 통해 고찰한다. 분석 결과, 두 자료구조는 절대적인 우위가 아닌, 수행하려는 작업의 종류에 따라 성능이 극명하게 갈리는 상호 보완적인 관계에 있음을 알 수 있다.

최근접 이웃 탐색은 주어진 쿼리 지점으로부터 가장 가까운 K개의 데이터 포인트를 찾는 연산이다.

KD-Tree의 NN 탐색 알고리즘은 매우 효율적인 가지치기(pruning) 전략을 사용한다. 먼저, 쿼리 지점이 속할 리프 노드까지 트리를 따라 내려가 초기 최근접 후보를 찾고 거리를 계산한다. 그 후, 다시 루트 방향으로 거슬러 올라가는(backtracking) 과정에서, 현재까지 찾은 최근접 거리로 정의된 초구(hypersphere)가 다른 쪽 형제 서브트리의 경계와 겹치는 경우에만 해당 서브트리를 탐색한다. 만약 겹치지 않는다면, 그 서브트리 전체를 탐색 대상에서 제외하여 계산량을 획기적으로 줄인다.15

이러한 알고리즘의 효율성 덕분에, 일반적인 시나리오에서 KD-Tree는 Octree보다 K-NN 탐색에서 월등한 성능을 보인다.20 PCL(Point Cloud Library)을 이용한 한 벤치마크 연구에서는, 동일한 3D 포인트 클라우드 데이터셋에 대해 K-NN 탐색(k=1, 10, 100)을 수행했을 때 KD-Tree가 Octree보다 2배에서 4배 이상 빠른 성능을 기록했다.20 이 성능 우위의 근본적인 원인은 KD-Tree의 데이터 적응적 분할 방식에 있다. 데이터의 분포를 고려하여 공간을 분할하기 때문에 쿼리 지점 주변의 탐색 공간을 더 효과적으로 가지치기 할 수 있다. 반면, Octree의 고정된 분할 방식은 쿼리 지점과 무관한 많은 데이터 포인트를 동일한 노드에 포함시킬 수 있어 탐색의 효율성을 떨어뜨린다.

범위 탐색은 주어진 쿼리 지점과 특정 반경으로 정의된 영역(구 또는 상자) 내에 포함되는 모든 데이터 포인트를 찾는 연산이다.

이 연산에서는 Octree가 KD-Tree보다 훨씬 우수한 성능을 보이는 경향이 있다.20 앞서 언급된 PCL 벤치마크에서, 반경 기반 범위 탐색(Radius Search)을 수행했을 때 Octree는 KD-Tree보다 최소 4배에서 최대 14배까지 빠른 압도적인 성능을 보였다.20 이러한 성능 역전 현상은 두 자료구조의 구조적 차이에서 기인한다.

첫째, 셀 형태의 차이가 결정적이다. Octree의 셀은 항상 정육면체이므로, 탐색 영역인 구(sphere)와의 교차 여부 판단이 기하학적으로 단순하고 계산 비용이 저렴하다. 반면, KD-Tree는 데이터 분포에 따라 길고 가는 형태의 셀(높은 종횡비)을 생성할 수 있다. 이 경우, 작은 탐색 구라 할지라도 수많은 길고 가는 셀들과 교차하게 되어 불필요한 노드 방문을 대거 유발한다.17

둘째, 트리 구조의 차이도 영향을 미친다. Octree의 상대적으로 얕고 넓은 트리 구조는 탐색 시 노드 간 이동 횟수를 줄여준다. 반면 KD-Tree의 깊은 이진 트리 구조는 더 많은 트리 순회 비용을 발생시킬 수 있다.20 결국, ‘어떤 자료구조가 더 빠른가?’라는 질문은 ‘무엇을 위해 사용할 것인가?’라는 질문으로 귀결된다. K-NN 탐색은 특정 ‘점’을 찾는 점 기반 질의이며, 범위 탐색은 특정 ‘영역’을 찾는 공간 기반 질의이다. KD-Tree의 데이터 중심 분할은 전자에, Octree의 공간 중심 분할은 후자에 최적화되어 있다.

트리 구축 시간은 이론적으로 KD-Tree가 중앙값 탐색 비용을 포함하여 평균 $O(n \log n)$의 복잡도를 가지며, 최악의 경우 $O(n^2)$까지 저하될 수 있다.15 Octree의 구축 시간은 데이터 수와 최대 깊이에 따라 결정된다. 실제 성능에 대해서는 상반된 결과들이 존재한다. 일부 연구는 KD-Tree의 구축이 더 빠르다고 주장하지만 17, PCL 벤치마크에서는 Octree가 더 빨랐으며 20, 최신 동적 구조 연구에서는 i-Octree가 ikd-Tree보다 구축이 64% 빠르다고 보고되었다.27 이는 구축 성능이 구현 방식, 데이터셋 특성, 최적화 수준에 크게 의존함을 시사한다.

데이터가 실시간으로 추가되거나 삭제되는 동적 환경에서는 두 구조 모두 전통적인 형태로는 한계를 보인다. KD-Tree는 삽입/삭제 시 균형이 쉽게 깨져 성능이 저하되며, 이를 막기 위한 재조정 비용이 크다.15 Octree는 점의 추가/삭제 자체는 상대적으로 간단하지만 29, 전체 데이터의 경계 상자가 확장될 경우 루트 노드부터 재구성해야 하는 막대한 오버헤드가 발생할 수 있다.27 이러한 한계를 극복하기 위해 i-Octree, ikd-Tree와 같이 증분(incremental) 및 동적(dynamic) 업데이트를 효율적으로 지원하는 차세대 자료구조에 대한 연구가 활발히 진행되고 있다.26

연산 (Operation) KD-Tree (ms) Octree (ms) 성능 우위
트리 구축 (Build Tree) 12 7 Octree
K-NN Search (k=1) 124 390 KD-Tree
K-NN Search (k=10) 124 395 KD-Tree
K-NN Search (k=100) 134 573 KD-Tree
Radius Search (r=0.01 m) 1789 126 Octree
Radius Search (r=0.1 m) 1799 129 Octree
Radius Search (r=1 m) 2011 415 Octree

표의 데이터는 PCL 라이브러리 기반 벤치마크 결과에서 인용됨.20

3차원을 넘어 더 높은 차원으로 공간을 확장할 때, 두 자료구조는 각기 다른 근본적인 한계에 부딪힌다. 이는 두 구조의 적용 가능한 차원의 범위를 명확히 규정한다.

Octree는 그 이름과 구조에서 알 수 있듯이 본질적으로 3차원 공간에 특화된 자료구조이다. 이를 K-차원으로 일반화하는 것은 이론적으로 가능하지만 실용적이지 않다. K-차원 공간을 균등하게 분할하기 위해서는 각 노드가 2k개의 자식 노드를 가져야 한다.30

차원 k가 4나 5 정도로 조금만 증가해도, 자식 노드의 수(24=16, 25=32)는 급격히 늘어난다. 이는 노드 하나를 저장하고 관리하는 데 필요한 메모리 사용량과 포인터 관리 오버헤드가 기하급수적으로 커짐을 의미한다. 따라서 Octree와 그 일반화 버전(2D의 Quadtree 포함)은 고차원 공간에 적용하기에 부적합하며, 저차원(주로 2D, 3D) 전용 구조로 간주된다.30 Octree가 고차원에서 겪는 문제는 트리를 구축하는 것 자체가 비효율적이 되는

구조적 폭발(structural explosion) 문제이다.

KD-Tree는 이름에서부터 알 수 있듯이 K-차원을 위해 설계된 범용적인 자료구조이다. 하지만 차원 k가 일정 수준 이상으로 높아지면(일반적으로 k>10∼20으로 알려짐), KD-Tree의 탐색 성능은 급격히 저하되어 결국 모든 데이터를 순차적으로 스캔하는 것과 다를 바 없어지는 현상, 즉 차원의 저주(Curse of Dimensionality)에 직면하게 된다.32

이 현상의 원인은 고차원 공간의 기하학적 특성에 있다. 차원이 높아질수록 공간의 부피는 차원에 따라 지수적으로 증가한다. 이로 인해 데이터 포인트들은 대부분 공간의 ‘껍질’ 부분에 분포하게 되고, 임의의 두 점 사이의 거리가 거의 비슷해지는 현상이 발생한다. 결과적으로, 최근접 이웃을 찾기 위해 설정한 탐색 반경을 가진 초구(hypersphere)가 거의 모든 분할 영역과 교차하게 된다. 이는 KD-Tree의 핵심 장점인 가지치기(pruning) 능력을 무력화시키며, 탐색 알고리즘이 트리의 거의 모든 노드를 방문해야 하는 비효율적인 상황을 초래한다.33 KD-Tree가 고차원에서 겪는 문제는 구축은 가능하지만 탐색 효율성이 붕괴되는

탐색 효율성 붕괴(search efficiency collapse) 문제이다.

이러한 한계 때문에, 고차원 특징 벡터 등을 다루는 현대 머신러닝 분야에서는 KD-Tree의 대안으로 Ball Tree와 같은 자료구조가 제안되었다. Ball Tree는 축-정렬 상자가 아닌 초구(hypersphere)를 이용해 공간을 분할한다. 데이터가 실제로는 고차원 공간 내의 저차원 매니폴드(manifold) 상에 놓여 있는 경우, Ball Tree는 이러한 데이터의 내재적 구조를 더 잘 포착하여 KD-Tree보다 훨씬 나은 탐색 성능을 보일 수 있다.32

지금까지의 구조 및 성능 분석을 종합하면, 최적의 자료구조 선택은 애플리케이션이 다루는 공간의 본질이 ‘물리적 3D 공간’인지, 아니면 추상적인 ‘다차원 특징 공간(feature space)’인지에 따라 결정된다는 결론에 도달할 수 있다.

Octree는 물리적 3차원 공간의 점유 상태와 공간적 근접성을 다루는 데 탁월한 성능을 보인다.

KD-Tree는 물리적 공간보다는, 데이터의 여러 속성으로 구성된 추상적인 다차원 특징 공간(feature space)에서 데이터 간의 유사성을 찾는 데 강점을 보인다.

이러한 적용 사례의 구분은 1장에서 도출한 ‘공간 중심’ 대 ‘데이터 중심’이라는 분할 철학의 차이와 정확히 일치한다. Octree는 물리 공간의 분할에, KD-Tree는 특징 공간에서의 데이터 조직화에 자연스럽게 부합하는 것이다. 따라서 개발자는 자신의 문제가 “공간 내 객체 찾기”인지 “데이터셋 내 유사 항목 찾기”인지를 명확히 정의함으로써 올바른 자료구조를 선택하는 데 대한 직관적이고 강력한 기준을 얻을 수 있다.

적용 분야 핵심 작업 권장 자료구조 핵심 근거
3D 게임 엔진 충돌 감지, 가시거리 컬링 Octree 균등한 공간 분할 및 정육면체 셀이 공간 기반 쿼리에 효율적임.1
LiDAR SLAM 실시간 반경 탐색, 맵 업데이트 Octree (특히 동적 버전) 3D 공간에서의 반경 탐색 성능이 압도적으로 우수함.20
복셀 기반 모델링 복셀 데이터 관리 및 렌더링 Octree 자료구조가 복셀의 계층적 표현과 자연스럽게 일치함.1
머신러닝 분류/회귀 K-최근접 이웃(K-NN) 탐색 KD-Tree 데이터 적응적 분할로 K-NN 탐색 성능이 매우 우수함.3
다차원 데이터베이스 다중 키(key) 기반 인덱싱 및 질의 KD-Tree K-차원 데이터의 효율적인 인덱싱 및 검색을 지원함.4
고차원 특징 매칭 10차원 이상 특징 벡터의 유사성 검색 Ball Tree (KD-Tree 대안) KD-Tree는 차원의 저주에 취약. Ball Tree가 더 강건함.32

본 보고서는 3차원 및 다차원 공간 데이터를 처리하는 데 있어 핵심적인 두 자료구조인 Octree와 KD-Tree를 다각도에서 심층적으로 비교 분석하였다. 분석을 통해 도출된 핵심 결론은 다음과 같다.

첫째, 두 자료구조의 가장 근본적인 차이는 분할 철학에 있다. Octree는 ‘공간 중심의 균등 분할’을 통해 예측 가능한 정육면체 셀 구조를 유지하는 반면, KD-Tree는 ‘데이터 중심의 적응적 분할’을 통해 데이터 개수 기준의 균형을 추구한다. 이 철학적 차이가 구조, 균형, 성능, 적용 분야 등 모든 면에서 두 자료구조의 상이한 특성을 결정짓는다.

둘째, 성능 측면에서 어느 한쪽의 절대적 우위는 존재하지 않으며, 상호 보완적인 관계를 보인다. 수행하려는 작업의 종류에 따라 성능 우위가 명확하게 갈린다. Octree는 3차원 공간에서의 반경 탐색(Radius Search)의 강자이며, KD-Tree는 다차원 공간에서의 K-최근접 이웃 탐색(K-NN Search)의 강자이다.

따라서 최적의 자료구조를 선택하기 위해서는 개발자가 자신의 애플리케이션 요구사항을 명확히 분석해야 한다. 최종 선택을 위한 가이드라인은 다음과 같은 요소들을 종합적으로 고려해야 한다.

  1. 데이터의 차원: 3차원 물리 공간 문제인가, 아니면 더 높은 차원의 추상적 특징 공간 문제인가?
  2. 데이터의 분포: 데이터가 공간에 균일하게 분포하는가, 아니면 특정 영역에 편향되거나 밀집되어 있는가?
  3. 주된 질의 유형: 가장 빈번하고 중요한 연산이 K-NN 탐색인가, 반경 탐색인가?
  4. 데이터의 정적/동적 특성: 데이터셋이 정적인가, 아니면 실시간으로 추가/삭제가 발생하는 동적 환경인가?

향후 연구는 이러한 전통적인 정적 구조의 한계를 극복하기 위한 방향으로 나아가고 있다. 실시간 환경에 대응하기 위한 동적/증분 자료구조(예: i-Octree, ikd-Tree) 26, 두 구조의 장점을 결합하려는

하이브리드 구조 5, 그리고 GPU와 같은 병렬 컴퓨팅 환경의 성능을 극대화하기 위한

알고리즘 및 구현 최적화 25 등이 유망한 연구 분야로 주목받고 있다. 이러한 연구들은 미래의 컴퓨팅 환경에서 더욱 복잡하고 거대한 데이터를 효율적으로 처리하는 데 핵심적인 기여를 할 것으로 기대된다.

  1. Octree - Wikipedia, accessed July 31, 2025, https://en.wikipedia.org/wiki/Octree
  2. Mastering Octrees in Algorithm Design - Number Analytics, accessed July 31, 2025, https://www.numberanalytics.com/blog/ultimate-guide-to-octree-in-algorithm-design
  3. What is KD-Tree? Activeloop Glossary, accessed July 31, 2025, https://www.activeloop.ai/resources/glossary/kd-tree/
  4. K-D Trees: The Ultimate Data Structure for Geometric Algorithms - Number Analytics, accessed July 31, 2025, https://www.numberanalytics.com/blog/kd-trees-ultimate-data-structure-geometric-algorithms
  5. A Hybrid Spatial Indexing Structure of Massive Point Cloud Based on Octree and 3D R*-Tree - MDPI, accessed July 31, 2025, https://www.mdpi.com/2076-3417/11/20/9581
  6. A Hybrid Spatial Indexing Structure of Massive Point Cloud Based on Octree and 3D R*-Tree - ResearchGate, accessed July 31, 2025, https://www.researchgate.net/publication/355248871_A_Hybrid_Spatial_Indexing_Structure_of_Massive_Point_Cloud_Based_on_Octree_and_3D_R-Tree
  7. Octrees – Knowledge and References - Taylor & Francis, accessed July 31, 2025, https://taylorandfrancis.com/knowledge/Engineering_and_technology/Computer_science/Octrees/
  8. Primal Tree의 공간 분할 샘플링 분석 및 구현, accessed July 31, 2025, https://koreascience.kr/article/JAKO201422354180047.pdf
  9. What are common benefits and uses of Octrees? : r/GraphicsProgramming - Reddit, accessed July 31, 2025, https://www.reddit.com/r/GraphicsProgramming/comments/10mf504/what_are_common_benefits_and_uses_of_octrees/
  10. Octree Insertion and Searching - GeeksforGeeks, accessed July 31, 2025, https://www.geeksforgeeks.org/dsa/octree-insertion-and-searching/
  11. k-d tree - Wikipedia, accessed July 31, 2025, https://en.wikipedia.org/wiki/K-d_tree
  12. KD-Tree(K-Dimensional Tree) - ITPE * JackerLab, accessed July 31, 2025, https://itpe.jackerlab.com/entry/KD-TreeK-Dimensional-Tree
  13. KD Trees in C++ - GeeksforGeeks, accessed July 31, 2025, https://www.geeksforgeeks.org/cpp/kd-trees-in-cpp/
  14. Exploring KD Trees: A Comprehensive Guide to Implementation and …, accessed July 31, 2025, https://medium.com/@isurangawarnasooriya/exploring-kd-trees-a-comprehensive-guide-to-implementation-and-applications-in-python-3385fd56a246
  15. Introduction to K-D Trees Baeldung on Computer Science, accessed July 31, 2025, https://www.baeldung.com/cs/k-d-trees
  16. K-Dimensional Tree in Data Structures - ScholarHat, accessed July 31, 2025, https://www.scholarhat.com/tutorial/datastructures/k-dimentional-tree-in-data-structures
  17. Why would one ever use an Octree over a KD-tree?, accessed July 31, 2025, https://cstheory.stackexchange.com/questions/8470/why-would-one-ever-use-an-octree-over-a-kd-tree
  18. Octree에 대해 설명해주세요. - velog, accessed July 31, 2025, https://velog.io/@tmdwns8840/Octree%EC%97%90-%EB%8C%80%ED%95%B4-%EC%84%A4%EB%AA%85%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94
  19. Kd -Tree and Ball Tree Algorithms by NithyaSri Medium, accessed July 31, 2025, https://medium.com/@polkamnithyasri/kd-tree-and-ball-tree-algorithms-aa99dfad4ceb
  20. kd-tree vs octree for 3d radius search - Stack Overflow, accessed July 31, 2025, https://stackoverflow.com/questions/17998103/kd-tree-vs-octree-for-3d-radius-search
  21. Performance comparison among octree implementing methods using Data 1., accessed July 31, 2025, https://www.researchgate.net/figure/Performance-comparison-among-octree-implementing-methods-using-Data-1_tbl3_329603314
  22. Introduction to Octrees : r/programming - Reddit, accessed July 31, 2025, https://www.reddit.com/r/programming/comments/31imje/introduction_to_octrees/
  23. 2D KD Tree and Nearest Neighbour Search - Stack Overflow, accessed July 31, 2025, https://stackoverflow.com/questions/28028618/2d-kd-tree-and-nearest-neighbour-search
  24. Implementing Approximate Nearest Neighbor Search with KD-Trees - PyImageSearch, accessed July 31, 2025, https://pyimagesearch.com/2024/12/23/implementing-approximate-nearest-neighbor-search-with-kd-trees/
  25. Comparison of kD-Tree and Octree. kD-Tree is most efficient for… - ResearchGate, accessed July 31, 2025, https://www.researchgate.net/figure/Comparison-of-kD-Tree-and-Octree-kD-Tree-is-most-efficient-for-neighbor-searching_fig4_332374702
  26. A Fast, Lightweight, and Dynamic Octree for Proximity Search - arXiv, accessed July 31, 2025, https://arxiv.org/html/2309.08315v2
  27. A Fast, Lightweight, and Dynamic Octree for Proximity Search - arXiv, accessed July 31, 2025, https://arxiv.org/pdf/2309.08315
  28. Comparison of octree structuring with K-NN, range search and Kd-tree for neighborhood computation. - ResearchGate, accessed July 31, 2025, https://www.researchgate.net/figure/Comparison-of-octree-structuring-with-K-NN-range-search-and-Kd-tree-for-neighborhood_fig2_331485436
  29. Algorithm for finding nearest neighbors fastest - Reddit, accessed July 31, 2025, https://www.reddit.com/r/algorithms/comments/m3emhz/algorithm_for_finding_nearest_neighbors_fastest/
  30. 4.4. Similar data structures - Castle Game Engine, accessed July 31, 2025, https://castle-engine.io/vrml_engine_doc/output/xsl/html/section.octree_similar.html
  31. www.quora.com, accessed July 31, 2025, https://www.quora.com/What-is-the-difference-between-kd-tree-and-octree-Which-one-is-advantageous#:~:text=k%2Dd%20trees%20are%20binary%20trees,work%20in%20higher%2Flower%20dimensions.
  32. KD-TREE AND BALL TREE IN KNN ALGORITHM by Narasimharaodevisetti Medium, accessed July 31, 2025, https://medium.com/@narasimharaodevisetti14/kd-tree-and-ball-tree-in-knn-algorithm-09a86d1bc6e6
  33. KD Trees - Computer Science Cornell, accessed July 31, 2025, https://www.cs.cornell.edu/courses/cs4780/2022sp/notes/LectureNotes19.html
  34. Octrees for Efficient Spatial Analysis - Number Analytics, accessed July 31, 2025, https://www.numberanalytics.com/blog/octrees-efficient-spatial-analysis
  35. Ball Tree and KD Tree Algorithms - GeeksforGeeks, accessed July 31, 2025, https://www.geeksforgeeks.org/machine-learning/ball-tree-and-kd-tree-algorithms/
  36. Why specifically are k-d trees preferred in ray tracing and octrees in collision? - Reddit, accessed July 31, 2025, https://www.reddit.com/r/gameenginedevs/comments/1789f54/why_specifically_are_kd_trees_preferred_in_ray/