árbol R* | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tipo de | estructura de datos | ||||||||||||
año de invención | 1990 | ||||||||||||
Autor | Norbert Beckmann, Hans-Peter Kriegel, Ralf Schneider y Bernhard Seeger | ||||||||||||
Complejidad en los símbolos O | |||||||||||||
|
|||||||||||||
Archivos multimedia en Wikimedia Commons |
Los árboles R* son una variante de los árboles R que se utilizan para indexar información espacial. Los árboles R* tienen un costo de creación ligeramente mayor que los árboles R estándar, ya que es posible que sea necesario reorganizar los datos (eliminar + insertar), pero el árbol resultante generalmente tiene un mejor rendimiento de consulta. Como un R-tree estándar, puede almacenar puntos y datos espaciales. El árbol fue propuesto por Norbert Beckmann, Hans-Peter Kriegel, Ralf Schneider y Bernhard Seeger en 1990 [1] .
Minimizar tanto la cobertura como la superposición es importante para el rendimiento de los árboles R. Superposición significa que, al consultar o insertar datos, es necesario expandir más de una rama del árbol (debido al método de dividir los datos en áreas que pueden superponerse). La cobertura minimizada mejora la eliminación al permitir que las páginas completas se excluyan de las búsquedas con más frecuencia, especialmente para consultas con rangos negativos. El árbol R* intenta reducir ambos valores mediante una combinación del algoritmo de división de nodos escaneados y el concepto de reinstalación forzada en caso de desbordamiento de nodos. El enfoque se basa en la observación de que las estructuras de árbol R son muy sensibles al orden en que se insertaron los elementos del árbol, por lo que es más probable que las estructuras basadas en inserción (en lugar de carga masiva) no sean óptimas. Eliminar y volver a insertar elementos del árbol les permite "encontrar" un lugar en el árbol que sea más adecuado que su ubicación original.
Cuando un nodo se desborda, algunos de sus elementos se eliminan del nodo y se vuelven a instalar en el árbol. (Para evitar un restablecimiento en cascada sin fin causado por otro nodo que se desborda en esta operación, el procedimiento de restablecimiento solo se puede llamar una vez en cada nivel del árbol cuando se inserta cualquier elemento nuevo). Esto da como resultado grupos de elementos mejor agrupados en el nodos, reduciendo la cobertura de nodos. Además, a menudo se retrasa la división del nudo, lo que conduce a un aumento del llenado medio del nudo. La reinserción se puede considerar como una técnica para optimizar un árbol en crecimiento cuando un nodo se desborda.
R-tree con tabique Gutman cuadrado [2] .
Hay muchas páginas que se extienden de izquierda a derecha por toda Alemania y las páginas se superponen mucho. Esta no es una propiedad muy favorable para la mayoría de las aplicaciones, que a menudo solo necesitan pequeñas áreas rectangulares que se cruzan con muchas rayas.
R-tree con partición lineal Anga-Tan [3] .
Aunque los rectángulos no son tan largos como en el mosaico de Gutmann, el problema de las bandas afecta a casi todas las hojas de la página. Las páginas de hoja se superponen poco, pero las páginas man se superponen mucho.
Partición topológica R* de un árbol [1] .
Las páginas se superponen muy poco porque el árbol R* intenta minimizar las páginas superpuestas y la reinserción optimiza aún más el árbol. La estrategia de partición tampoco favorece las bandas, por lo que las páginas resultantes son más adecuadas para aplicaciones de mapeo.
Las consultas en el peor de los casos y la complejidad de eliminación son idénticas a las de un árbol R. La estrategia de inserción de árbol R* tiene complejidad y es más compleja que la estrategia de división lineal ( ) del árbol R, pero es menos compleja que la estrategia de división cuadrada ( ) para el tamaño de página de los objetos, y tiene una pequeña contribución a la complejidad general. La complejidad general de la inserción sigue siendo comparable a la de un árbol R: una reinserción afecta como máximo a una rama del árbol y, por lo tanto, genera inserciones repetidas, cuyo rendimiento es comparable al de un árbol R normal. Entonces, la complejidad general de un árbol R* es la misma que la de un árbol R normal.
La implementación del algoritmo completo debe manejar muchos casos de esquina y situaciones dependientes, que no se tratan aquí.
Árbol (estructura de datos) | |
---|---|
Árboles binarios | |
Árboles binarios autoequilibrados |
|
árboles B |
|
árboles de prefijo |
|
Partición binaria del espacio | |
Árboles no binarios |
|
Rompiendo el espacio |
|
Otros árboles |
|
Algoritmos |
Estructuras de datos | |
---|---|
Liza | |
Árboles | |
cuenta | |
Otro |