¿Cuál es la diferencia entre un árbol KD y un árbol R?

81

Miré la definición de árbol KD y árbol R. Me parece que son casi iguales.

¿Cuál es la diferencia entre un árbol KD y un árbol R?

zjffdu
fuente

Respuestas:

60

R-árboles y k d-árboles se basan en ideas similares (espacio partición basada en las regiones de eje alineados), pero las diferencias clave son:

  • Los nodos en k árboles d representan planos de separación, mientras que los nodos en árboles R representan cuadros delimitadores.
  • k los árboles d dividen todo el espacio en regiones, mientras que los árboles R solo dividen el subconjunto del espacio que contiene los puntos de interés.
  • Los árboles k d representan una partición disjunta (los puntos pertenecen a una sola región) mientras que las regiones en un árbol R pueden superponerse.

(Hay muchos tipos similares de estructuras de árbol para dividir el espacio: quadtrees, BSP-trees, R * -trees, etc., etc.)

Gareth Rees
fuente
106

En realidad, son bastante diferentes. Tienen un propósito similar (consultas de región sobre datos espaciales), y ambos son árboles (y ambos pertenecen a la familia de índices de jerarquía de volúmenes delimitadores), pero eso es todo lo que tienen en común.

  • Los árboles R están equilibrados , los árboles kd no (a menos que se carguen a granel). Esta es la razón por la que se prefieren los árboles R para cambiar los datos, ya que es posible que sea necesario reconstruir los árboles kd para volver a optimizarlos.
  • Los árboles R están orientados al disco . En realidad, organizan los datos en áreas que se asignan directamente a la representación en disco. Esto los hace más útiles en bases de datos reales y para operaciones sin memoria. Los árboles kd están orientados a la memoria y no son triviales para colocarlos en las páginas del disco.
  • Los árboles kd son elegantes cuando se cargan de forma masiva (felicitaciones a SingleNegationElimination por señalar esto), mientras que los árboles R son mejores para cambiar los datos (aunque se benefician de la carga masiva, cuando se usan con datos estáticos).
  • Los árboles R no cubren todo el espacio de datos. Se pueden descubrir áreas vacías. Los árboles kd siempre cubren todo el espacio.
  • kd-trees binary divide el espacio de datos, R-trees divide los datos en rectángulos . Las divisiones binarias son obviamente inconexas; mientras que los rectángulos de un árbol R pueden superponerse (lo que en realidad es bueno a veces, aunque uno intenta minimizar la superposición)
  • Los árboles kd son mucho más fáciles de implementar en la memoria, que en realidad es su beneficio clave
  • Los árboles R pueden almacenar rectángulos y polígonos , los árboles kd solo almacenan vectores de puntos (ya que la superposición es necesaria para los polígonos)
  • Los árboles R vienen con varias estrategias de optimización, diferentes divisiones, cargadores a granel, estrategias de inserción y reinserción, etc.
  • kd-trees usan la distancia unidimensional al hiperplano de separación como límite; Los árboles R usan la distancia mínima d-dimensional al hiperrectángulo delimitador para delimitar (también pueden usar la distancia máxima para algunas consultas de conteo, para filtrar verdaderos positivos).
  • Los árboles kd admiten la distancia euclidiana al cuadrado y las normas de Minkowski, mientras que se ha demostrado que los árboles R también admiten la distancia geodésica (para encontrar puntos cercanos en geodatos).
Ha dejado de fumar - Anony-Mousse
fuente
37

Una diferencia importante entre los dos que no se mencionan en esta respuesta es que los árboles KD solo son eficientes en situaciones de carga masiva. Una vez construido, modificar o reequilibrar un árbol KD no es trivial. Los árboles R no sufren de esto.

SingleNegationElimination
fuente