R*-árbol

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 12 de diciembre de 2019; la verificación requiere 1 edición .
á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
Promedio Lo peor
Consumo de memoria O( n ) O( n )
Búsqueda O ( iniciar sesión )
Insertar O ( iniciar sesión )
 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] .

La diferencia entre árboles R* y árboles R

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.

Rendimiento

Algoritmo y complejidad

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í.

Notas

  1. 1 2 Beckmann, Kriegel, Schneider, Seeger, 1990 , p. 322.
  2. Guttman, 1984 , pág. 47.
  3. Ang, Tan, 1997 , pág. 337–349.

Literatura