KD-tree와 R-tree의 정의를 살펴 보았습니다. 그들은 거의 같은 것 같습니다.
KD- 트리와 R- 트리의 차이점은 무엇입니까?
답변
R- 트리 와 k 개의 d- 트리는 비슷한 아이디어 (축 정렬 영역을 기반으로하는 공간 분할)를 기반으로하지만 주요 차이점은 다음과 같습니다.
- k d- 트리의 노드 는 분리 평면을 나타내는 반면 R- 트리의 노드는 경계 상자를 나타냅니다.
- k d- 트리는 전체 공간을 영역으로 분할하는 반면 R- 트리는 관심 지점을 포함하는 공간의 하위 집합 만 분할합니다.
- k 개의 d- 트리는 분리 된 파티션 (포인트는 한 영역에만 속함)을 나타내는 반면 R- 트리의 영역은 겹칠 수 있습니다.
(공간 분할을위한 유사한 종류의 트리 구조가 많이 있습니다 : 쿼드 트리, BSP- 트리, R *-트리 등)
답변
실제로는 상당히 다릅니다. 그들은 비슷한 목적 (공간 데이터에 대한 지역 쿼리)을 제공하고 둘 다 트리이며 (둘 다 경계 볼륨 계층 인덱스 제품군에 속함) 공통점이 전부입니다.
- R- 트리는 균형을 이루고 kd- 트리는 그렇지 않습니다 (대량로드되지 않는 한). 이것이 데이터를 변경하는 데 R- 트리가 선호되는 이유입니다. kd- 트리를 재 최적화하기 위해 다시 빌드해야 할 수도 있기 때문입니다.
- R- 트리는 디스크 지향적 입니다. 실제로 디스크상의 표현에 직접 매핑되는 영역에서 데이터를 구성합니다. 따라서 실제 데이터베이스 및 메모리 부족 작업에 더 유용합니다. kd- 트리는 메모리 지향적 이며 디스크 페이지에 넣는 것이 중요하지 않습니다.
- kd- 트리는 대량로드시 우아하고 (이를 지적하기 위해 SingleNegationElimination에 대한 쿠도스) R- 트리는 데이터 변경에 더 좋습니다 (정적 데이터와 함께 사용하면 대량로드의 이점이 있음).
- R- 트리는 전체 데이터 공간을 포함하지 않습니다. 빈 공간이 드러날 수 있습니다. kd-tree는 항상 전체 공간을 덮습니다.
- kd-trees 는 데이터 공간을 분할 하고 R-tree는 데이터를 직사각형 으로 분할합니다 . 이진 분할은 분명히 분리되어 있습니다. R- 트리의 사각형이 겹칠 수 있지만 (오버랩을 최소화하려고하지만 실제로는 때때로 좋습니다)
- kd-trees는 메모리에서 구현하기가 훨씬 쉽습니다. 이것이 실제로 주요 이점입니다.
- R- 트리는 직사각형과 다각형을 저장할 수 있고 , kd- 트리는 점 벡터 만 저장합니다 (폴리곤에 중첩이 필요하기 때문에)
- R- 트리에는 다양한 최적화 전략, 다양한 분할, 벌크 로더, 삽입 및 재 삽입 전략 등이 있습니다.
- kd- 트리는 분리하는 초평면까지의 1 차원 거리를 경계로 사용합니다. R- 트리는 경계를 위해 경계 초 직사각형까지의 d 차원 최소 거리를 사용합니다 (참 양성을 필터링하기 위해 일부 계산 쿼리에 최대 거리를 사용할 수도 있음).
- kd-trees는 제곱 유클리드 거리 및 Minkowski 규범을 지원하는 반면 Rtree는 측지 거리 (지리 데이터에서 가까운 지점을 찾기 위해)도 지원하는 것으로 나타났습니다.
답변
이 답변에 언급되지 않은 두 가지의 주요 차이점은 KD- 트리는 대량로드 상황에서만 효율적이라는 것입니다. 일단 구축되면 KD 트리를 수정하거나 재조정하는 것은 사소한 일이 아닙니다. R- 트리는 이것으로 고통받지 않습니다.