stringtranslate.com

árbol R

Ejemplo sencillo de un árbol R para rectángulos 2D
Visualización de un árbol R* para puntos 3D usando ELKI (los cubos son páginas de directorio)

Los árboles R son estructuras de datos en forma de árbol que se utilizan para métodos de acceso espacial , es decir, para indexar información multidimensional como coordenadas geográficas , rectángulos o polígonos . El árbol R fue propuesto por Antonin Guttman en 1984 [2] y ha encontrado un uso significativo tanto en contextos teóricos como aplicados. [3] Un uso común en el mundo real de un árbol R podría ser almacenar objetos espaciales como ubicaciones de restaurantes o los polígonos de los que están hechos los mapas típicos: calles, edificios, contornos de lagos, costas, etc. y luego encontrar respuestas. rápidamente a consultas como "Encontrar todos los museos dentro de 2 km de mi ubicación actual", "recuperar todos los segmentos de carretera dentro de 2 km de mi ubicación" (para mostrarlos en un sistema de navegación ) o "encontrar la gasolinera más cercana" (aunque no teniendo en cuenta las carreteras). El árbol R también puede acelerar la búsqueda del vecino más cercano [4] para varias métricas de distancia, incluida la distancia del círculo máximo . [5]

idea del árbol R

La idea clave de la estructura de datos es agrupar objetos cercanos y representarlos con su rectángulo delimitador mínimo en el siguiente nivel superior del árbol; la "R" en R-tree es para rectángulo. Dado que todos los objetos se encuentran dentro de este rectángulo delimitador, una consulta que no interseca el rectángulo delimitador tampoco puede intersectar ninguno de los objetos contenidos. A nivel de hoja, cada rectángulo describe un único objeto; en niveles superiores la agregación incluye un número cada vez mayor de objetos. Esto también puede verse como una aproximación cada vez más burda del conjunto de datos.

Similar al árbol B , el árbol R también es un árbol de búsqueda equilibrado (por lo que todos los nodos hoja están a la misma profundidad), organiza los datos en páginas y está diseñado para almacenamiento en disco (como se usa en las bases de datos ). Cada página puede contener un número máximo de entradas, a menudo denominadas . También garantiza un relleno mínimo (excepto para el nodo raíz); sin embargo, el mejor rendimiento se ha experimentado con un relleno mínimo del 30 % al 40 % del número máximo de entradas (los árboles B garantizan un relleno de página del 50 % y los árboles B*- árboles incluso el 66%). La razón de esto es el equilibrio más complejo requerido para los datos espaciales en comparación con los datos lineales almacenados en árboles B.

Como ocurre con la mayoría de los árboles, los algoritmos de búsqueda (por ejemplo, intersección , contención, búsqueda del vecino más cercano ) son bastante simples. La idea clave es utilizar los cuadros delimitadores para decidir si buscar o no dentro de un subárbol. De esta forma, la mayoría de los nodos del árbol nunca se leen durante una búsqueda. Al igual que los árboles B, los árboles R son adecuados para grandes conjuntos de datos y bases de datos , donde los nodos se pueden paginar en la memoria cuando sea necesario y el árbol completo no se puede mantener en la memoria principal. Incluso si los datos pueden caber en la memoria (o almacenarse en caché), los árboles R en la mayoría de las aplicaciones prácticas generalmente proporcionarán ventajas de rendimiento sobre la verificación ingenua de todos los objetos cuando el número de objetos es superior a unos pocos cientos. Sin embargo, para aplicaciones en memoria, existen alternativas similares que pueden proporcionar un rendimiento ligeramente mejor o ser más sencillas de implementar en la práctica. [ cita necesaria ] Para mantener la computación en memoria para R-tree en un grupo de computadoras donde los nodos informáticos están conectados por una red, los investigadores han utilizado RDMA ( Acceso remoto directo a memoria ) para implementar aplicaciones con uso intensivo de datos bajo R-tree en un sistema distribuido ambiente. [6] Este enfoque es escalable para aplicaciones cada vez más grandes y logra un alto rendimiento y baja latencia para R-tree.

La dificultad clave de R-tree es construir un árbol eficiente que, por un lado, esté equilibrado (de modo que los nodos de las hojas estén a la misma altura) y, por otro lado, los rectángulos no cubran demasiado espacio vacío y no se superpongan demasiado ( de modo que durante la búsqueda sea necesario procesar menos subárboles). Por ejemplo, la idea original de insertar elementos para obtener un árbol eficiente es insertar siempre en el subárbol que requiera la menor ampliación de su cuadro delimitador. Una vez que la página está llena, los datos se dividen en dos conjuntos que deben cubrir el área mínima cada uno. La mayor parte de la investigación y mejoras de los árboles R tienen como objetivo mejorar la forma en que se construye el árbol y se pueden agrupar en dos objetivos: construir un árbol eficiente desde cero (conocido como carga masiva) y realizar cambios en un árbol existente (inserción y supresión).

Los árboles R no garantizan un buen rendimiento en el peor de los casos , pero generalmente funcionan bien con datos del mundo real. [7] Si bien tiene más interés teórico, la variante del árbol R de prioridad (cargada en masa) del árbol R es óptima en el peor de los casos, [8] pero debido a la mayor complejidad, no ha recibido mucha atención en aplicaciones prácticas, por lo que lejos.

Cuando los datos se organizan en un árbol R, los vecinos dentro de una distancia determinada r y los k vecinos más cercanos (para cualquier norma L p ) de todos los puntos se pueden calcular de manera eficiente mediante una unión espacial. [9] [10] Esto es beneficioso para muchos algoritmos basados ​​en este tipo de consultas, por ejemplo, el factor de valor atípico local . DeLi-Clu, [11] Density-Link-Clustering es un algoritmo de análisis de conglomerados que utiliza la estructura de árbol R para un tipo similar de unión espacial para calcular de manera eficiente un agrupamiento OPTICS .

Variantes

Algoritmo

Diseño de datos

Los datos en R-trees están organizados en páginas que pueden tener un número variable de entradas (hasta un máximo predefinido y generalmente por encima de un mínimo). Cada entrada dentro de un nodo que no es hoja almacena dos datos: una forma de identificar un nodo hijo y el cuadro delimitador de todas las entradas dentro de este nodo hijo. Los nodos hoja almacenan los datos necesarios para cada niño, a menudo un punto o cuadro delimitador que representa al niño y un identificador externo para el niño. Para datos de puntos, las entradas de las hojas pueden ser solo los puntos mismos. Para datos de polígonos (que a menudo requieren el almacenamiento de polígonos grandes), la configuración común es almacenar solo el MBR (rectángulo delimitador mínimo) del polígono junto con un identificador único en el árbol.

Buscar

En la búsqueda por rango , la entrada es un rectángulo de búsqueda (cuadro de consulta). La búsqueda es bastante similar a la búsqueda en un árbol B+ . La búsqueda comienza desde el nodo raíz del árbol. Cada nodo interno contiene un conjunto de rectángulos y punteros al nodo secundario correspondiente y cada nodo hoja contiene los rectángulos de objetos espaciales (el puntero a algún objeto espacial puede estar allí). Para cada rectángulo en un nodo, se debe decidir si se superpone al rectángulo de búsqueda o no. En caso afirmativo, también se debe buscar el nodo secundario correspondiente. La búsqueda se realiza así de forma recursiva hasta que se hayan atravesado todos los nodos superpuestos. Cuando se alcanza un nodo hoja, los cuadros delimitadores contenidos (rectángulos) se comparan con el rectángulo de búsqueda y sus objetos (si los hay) se colocan en el conjunto de resultados si se encuentran dentro del rectángulo de búsqueda.

Para la búsqueda prioritaria, como la búsqueda del vecino más cercano , la consulta consta de un punto o rectángulo. El nodo raíz se inserta en la cola de prioridad. Hasta que la cola esté vacía o se haya devuelto el número deseado de resultados, la búsqueda continúa procesando la entrada más cercana en la cola. Los nodos del árbol se expanden y sus hijos se reinsertan. Las entradas de hoja se devuelven cuando se encuentran en la cola. [12] Este enfoque se puede utilizar con varias métricas de distancia, incluida la distancia de círculo máximo para datos geográficos. [5]

Inserción

Para insertar un objeto, el árbol se recorre recursivamente desde el nodo raíz. En cada paso, se examinan todos los rectángulos en el nodo del directorio actual y se elige un candidato utilizando una heurística como elegir el rectángulo que requiera la menor ampliación. Luego la búsqueda desciende a esta página, hasta llegar a un nodo hoja. Si el nodo de la hoja está lleno, se debe dividir antes de realizar la inserción. Nuevamente, dado que una búsqueda exhaustiva es demasiado costosa, se emplea una heurística para dividir el nodo en dos. Al agregar el nodo recién creado al nivel anterior, este nivel puede volver a desbordarse y estos desbordamientos pueden propagarse hasta el nodo raíz; cuando este nodo también se desborda, se crea un nuevo nodo raíz y el árbol aumenta en altura.

Elegir el subárbol de inserción

El algoritmo necesita decidir en qué subárbol insertar. Cuando un objeto de datos está completamente contenido en un solo rectángulo, la elección es clara. Cuando hay múltiples opciones o rectángulos que necesitan ampliación, la elección puede tener un impacto significativo en el rendimiento del árbol.

Los objetos se insertan en el subárbol que necesita la menor ampliación. Se emplea una heurística de mezcla en todo momento. Lo que sucede a continuación es que intenta minimizar la superposición (en caso de empates, prefiera la menor ampliación y luego la menor área); en los niveles más altos, se comporta de manera similar al árbol R, pero en los vínculos prefiere nuevamente el subárbol con área más pequeña. La menor superposición de rectángulos en el árbol R* es uno de los beneficios clave sobre el árbol R tradicional.

Dividir un nodo desbordado

Dado que redistribuir todos los objetos de un nodo en dos nodos tiene un número exponencial de opciones, es necesario emplear una heurística para encontrar la mejor división. En el árbol R clásico, Guttman propuso dos de estas heurísticas, llamadas QuadraticSplit y LinearSplit. En la división cuadrática, el algoritmo busca el par de rectángulos que sea la peor combinación para tener en el mismo nodo y los coloca como objetos iniciales en los dos nuevos grupos. Luego busca la entrada que tiene la preferencia más fuerte por uno de los grupos (en términos de aumento de área) y asigna el objeto a este grupo hasta que se asignen todos los objetos (satisfaciendo el relleno mínimo).

Existen otras estrategias de división como la división de Greene, [13] la heurística de división del árbol R* [14] (que nuevamente intenta minimizar la superposición, pero también prefiere páginas cuadráticas) o el algoritmo de división lineal propuesto por Ang y Tan [15] (que, sin embargo, puede producir rectángulos muy irregulares, que tienen menos rendimiento para muchas consultas de rango y ventana del mundo real). Además de tener una heurística de división más avanzada, el árbol R* también intenta evitar dividir un nodo reinsertando algunos de los miembros del nodo, lo cual es similar a la forma en que un árbol B equilibra los nodos desbordados. Se demostró que esto también reduce la superposición y, por lo tanto, aumenta el rendimiento del árbol.

Finalmente, el árbol X [16] puede verse como una variante del árbol R* que también puede decidir no dividir un nodo, sino construir un llamado supernodo que contenga todas las entradas adicionales, cuando no encuentra una buena división (en particular para datos de alta dimensión).

Supresión

Para eliminar una entrada de una página es posible que sea necesario actualizar los rectángulos delimitadores de las páginas principales. Sin embargo, cuando una página no está llena, no se equilibrará con sus vecinas. En lugar de ello, la página se disolverá y todos sus elementos secundarios (que pueden ser subárboles, no sólo objetos hoja) se reinsertarán. Si durante este proceso el nodo raíz tiene un solo elemento, la altura del árbol puede disminuir.

carga masiva

Ver también

Referencias

  1. ^ Árbol R cs.sfu.ca
  2. ^ abc Guttman, A. (1984). "R-Trees: una estructura de índice dinámica para búsqueda espacial" (PDF) . Actas de la conferencia internacional ACM SIGMOD de 1984 sobre gestión de datos - SIGMOD '84 . pag. 47. doi : 10.1145/602259.602266. ISBN 978-0897911283. S2CID  876601.
  3. ^ Y. Manolopoulos; A. Nanopoulos; Y. Theodoridis (2006). R-Trees: teoría y aplicaciones. Saltador. ISBN 978-1-85233-977-7. Consultado el 8 de octubre de 2011 .
  4. ^ Roussopoulos, N.; Kelley, S.; Vicente, FDR (1995). "Consultas de vecinos más cercanos". Actas de la conferencia internacional ACM SIGMOD de 1995 sobre gestión de datos - SIGMOD '95 . pag. 71.doi : 10.1145 /223784.223794 . ISBN 0897917316.
  5. ^ ab Schubert, E.; Zimek, A.; Kriegel, HP (2013). "Consultas de distancia geodésica en árboles R para indexar datos geográficos". Avances en Bases de Datos Espaciales y Temporales . Apuntes de conferencias sobre informática. vol. 8098. pág. 146. doi :10.1007/978-3-642-40235-7_9. ISBN 978-3-642-40234-0.
  6. ^ Mengbai Xiao, Hao Wang, Liang Geng, Rubao Lee y Xiaodong Zhang (2022). "Una plataforma informática en memoria habilitada para RDMA para R-tree en clústeres" . Transacciones ACM sobre sistemas y algoritmos espaciales. págs. 1–26. doi : 10.1145/3503513 .{{cite conference}}: Mantenimiento CS1: varios nombres: lista de autores ( enlace )
  7. ^ Hwang, S.; Kwon, K.; Cha, SK; Lee, BS (2003). "Evaluación del rendimiento de las variantes del árbol R de la memoria principal" . Avances en Bases de Datos Espaciales y Temporales . Apuntes de conferencias sobre informática. vol. 2750. págs. 10. doi : 10.1007/978-3-540-45072-6_2. ISBN 978-3-540-40535-1.
  8. ^ Arge, L .; De Berg, M.; Haverkort, HJ; Yi, K. (2004). "El árbol R de prioridad" (PDF) . Actas de la conferencia internacional ACM SIGMOD 2004 sobre gestión de datos - SIGMOD '04. pag. 347. doi : 10.1145/1007568.1007608. ISBN 978-1581138597. S2CID  6817500.
  9. ^ Brinkhoff, T.; Kriegel, HP ; Seeger, B. (1993). "Procesamiento eficiente de uniones espaciales mediante árboles R". Registro ACM SIGMOD . 22 (2): 237. CiteSeerX 10.1.1.72.4514 . doi :10.1145/170036.170075. S2CID  7810650. 
  10. ^ Böhm, cristiano; Krebs, Florian (1 de septiembre de 2003). "Compatibilidad con aplicaciones KDD mediante la unión de k-vecino más cercano". Aplicaciones de bases de datos y sistemas expertos . Apuntes de conferencias sobre informática. vol. 2736. Springer, Berlín, Heidelberg. págs. 504–516. CiteSeerX 10.1.1.71.454 . doi :10.1007/978-3-540-45227-0_50. ISBN  9783540408062.
  11. ^ Achtert, Elke; Böhm, Christian; Kröger, Peer (2006). "DeLi-Clu: impulsar la robustez, la integridad, la usabilidad y la eficiencia de la agrupación jerárquica mediante una clasificación de par más cercano". En Ng, Wee Keong; Kitsuregawa, Masaru; Li, Jianzhong; Chang, Kuiyu (eds.). Advances in Knowledge Discovery and Data Mining, Décima Conferencia Pacífico-Asia, PAKDD 2006, Singapur, 9 al 12 de abril de 2006, Actas . Apuntes de conferencias sobre informática. vol. 3918. Saltador. págs. 119-128. doi :10.1007/11731139_16.
  12. ^ Kuan, J.; Lewis, P. (1997). "Búsqueda rápida de k vecino más cercano para la familia de árboles R". Actas de ICICS, Conferencia internacional de 1997 sobre información, comunicaciones y procesamiento de señales. Tema: Tendencias en Ingeniería de Sistemas de Información y Comunicaciones Multimedia Inalámbricas (Cat. No.97TH8237) . pag. 924. doi :10.1109/ICICS.1997.652114. ISBN 0-7803-3676-3.
  13. ^ ab Greene, D. (1989). "Un análisis de implementación y rendimiento de métodos de acceso a datos espaciales". [1989] Actas. Quinta Conferencia Internacional sobre Ingeniería de Datos . págs. 606–615. doi :10.1109/ICDE.1989.47268. ISBN 978-0-8186-1915-1. S2CID  7957624.
  14. ^ ab Beckmann, N.; Kriegel, HP ; Schneider, R.; Seeger, B. (1990). "El árbol R*: un método de acceso eficiente y robusto para puntos y rectángulos" (PDF) . Actas de la conferencia internacional ACM SIGMOD de 1990 sobre gestión de datos - SIGMOD '90 . pag. 322. CiteSeerX 10.1.1.129.3731 . doi : 10.1145/93597.98741. ISBN  978-0897913652. S2CID  11567855.
  15. ^ ab Ang, CH; Bronceado, TC (1997). "Nuevo algoritmo de división de nodos lineales para árboles R". En Scholl, Michel; Voisard, Agnès (eds.). Actas del Quinto Simposio Internacional sobre Avances en Bases de Datos Espaciales (SSD '97), Berlín, Alemania, 15 al 18 de julio de 1997 . Apuntes de conferencias sobre informática. vol. 1262. Saltador. págs. 337–349. doi :10.1007/3-540-63238-7_38.
  16. ^ Berchtold, Stefan; Keim, Daniel A.; Kriegel, Hans-Peter (1996). "El X-Tree: una estructura de índice para datos de alta dimensión". Actas de la 22ª Conferencia VLDB . Bombay, India: 28–39.
  17. ^ Leutenegger, Scott T.; Edgington, Jeffrey M.; López, Mario A. (febrero de 1997). "STR: un algoritmo simple y eficiente para el empaquetado de árboles R".
  18. ^ Lee, Taewon; Lee, Sukho (junio de 2003). "OMT: algoritmo de carga masiva de arriba hacia abajo que minimiza la superposición para R-tree" (PDF) .

Enlaces externos