En informática , un árbol de rangos es una estructura de datos de árbol ordenado para almacenar una lista de puntos. Permite informar de manera eficiente todos los puntos dentro de un rango dado y se usa típicamente en dos o más dimensiones. Los árboles de rangos fueron introducidos por Jon Louis Bentley en 1979. [ 1 ] Estructuras de datos similares fueron descubiertas independientemente por Lueker, [ 2 ] Lee y Wong, [ 3 ] y Willard. [ 4 ] El árbol de rangos es una alternativa al árbol k -d . En comparación con los árboles k -d, los árboles de rangos ofrecen tiempos de consulta más rápidos de (en notación Big O ).pero peor almacenamiento dedonde n es el número de puntos almacenados en el árbol, d es la dimensión de cada punto y k es el número de puntos reportados por una consulta dada.
En 1990, Bernard Chazelle mejoró esto al tiempo de consulta.y complejidad espacial. [ 5 ] [ 6 ]
Estructura de datos

Un árbol de rangos en un conjunto de puntos unidimensionales es un árbol de búsqueda binaria balanceado en esos puntos. Los puntos almacenados en el árbol se almacenan en las hojas del árbol; cada nodo interno almacena el valor más grande de su subárbol izquierdo. Un árbol de rangos en un conjunto de puntos en d dimensiones es un árbol de búsqueda binaria multinivel definido recursivamente . Cada nivel de la estructura de datos es un árbol de búsqueda binaria en una de las d dimensiones. El primer nivel es un árbol de búsqueda binaria en la primera de las d coordenadas. Cada vértice v de este árbol contiene una estructura asociada que es un árbol de rangos ( d -1)-dimensional en las últimas ( d -1)-coordenadas de los puntos almacenados en el subárbol de v .
Operaciones
Construcción
Un árbol de rango unidimensional sobre un conjunto de n puntos es un árbol de búsqueda binaria, que se puede construir entiempo. Los árboles de rango en dimensiones superiores se construyen recursivamente construyendo un árbol de búsqueda binaria balanceado en la primera coordenada de los puntos y luego, para cada vértice v en este árbol, construyendo un árbol de rango de ( d -1) dimensiones en los puntos contenidos en el subárbol de v . Construir un árbol de rango de esta manera requeriríatiempo.
Este tiempo de construcción se puede mejorar para árboles de rango bidimensionales.[ 7 ] Sea S un conjunto de n puntos bidimensionales. Si S contiene solo un punto, devuelva una hoja que contenga ese punto. De lo contrario, construya la estructura asociada de S , un árbol de rango unidimensional en las coordenadas y de los puntos en S. Sea x m la mediana de la coordenada x de los puntos. Sea S L el conjunto de puntos con coordenada x menor o igual a x m y sea S R el conjunto de puntos con coordenada x mayor que x m . Construya recursivamente v L , un árbol de rango bidimensional en S L , y v R , un árbol de rango bidimensional en S R. Cree un vértice v con hijo izquierdo v L e hijo derecho v R. Si ordenamos los puntos por sus coordenadas y al inicio del algoritmo, y mantenemos este orden al dividir los puntos por su coordenada x , podemos construir las estructuras asociadas de cada subárbol en tiempo lineal. Esto reduce el tiempo necesario para construir un árbol de rango bidimensional.y también reduce el tiempo para construir un árbol de rango d -dimensional a.
Consultas de rango

Una consulta de rango en un árbol de rango informa el conjunto de puntos que se encuentran dentro de un intervalo dado. Para informar los puntos que se encuentran en el intervalo [ x 1 , x 2 ], comenzamos buscando x 1 y x 2 . En algún vértice del árbol, las rutas de búsqueda hacia x 1 y x 2 divergirán. Sea v split el último vértice que estas dos rutas de búsqueda tienen en común. Para cada vértice v en la ruta de búsqueda desde v split hasta x 1 , si el valor almacenado en v es mayor que x 1 , informa cada punto en el subárbol derecho de v . Si v es una hoja, informa el valor almacenado en v si está dentro del intervalo de consulta. De manera similar, informa todos los puntos almacenados en los subárboles izquierdos de los vértices con valores menores que x 2 a lo largo de la ruta de búsqueda desde v split hasta x 2 , e informa la hoja de esta ruta si se encuentra dentro del intervalo de consulta.
Dado que el árbol de rangos es un árbol binario equilibrado, las rutas de búsqueda a x 1 y x 2 tienen longitud. Informar todos los puntos almacenados en el subárbol de un vértice se puede hacer en tiempo lineal utilizando cualquier algoritmo de recorrido de árboles . Por lo tanto, el tiempo para realizar una consulta de rango esdonde k es el número de puntos en el intervalo de consulta.
Las consultas de rango en d dimensiones son similares. En lugar de informar todos los puntos almacenados en los subárboles de las rutas de búsqueda, se realiza una consulta de rango ( d -1)-dimensional en la estructura asociada de cada subárbol. Eventualmente, se realizará una consulta de rango 1-dimensional y se informarán los puntos correctos. Dado que una consulta d -dimensional consta deConsultas de rango de ( d -1) dimensiones, se deduce que el tiempo requerido para realizar una consulta de rango de d dimensiones esdonde k es el número de puntos en el intervalo de consulta. Esto se puede reducir autilizando una variante de cascada fraccionaria . [ 2 ] [ 4 ] [ 7 ]
Véase también
Referencias
- ↑ Bentley, JL (1979). "Problemas de búsqueda descomponibles" (PDF) . Information Processing Letters . 8 (5): 244– 251. doi : 10.1016/0020-0190(79)90117-0 . Archivado del original el 24 de septiembre de 2017.
- 1 2 Lueker, GS (1978). "Una estructura de datos para consultas de rango ortogonal". 19º Simposio Anual sobre Fundamentos de la Informática (SFCS 1978) . pp. 28–21 . doi : 10.1109/SFCS.1978.1 . S2CID 14970942 .
- ↑ Lee, DT; Wong, CK (1980). "Árboles quintarios: una estructura de archivos para sistemas de bases de datos multidimensionales". ACM Transactions on Database Systems . 5 (3): 339. doi : 10.1145/320613.320618 . S2CID 2547376 .
- 1 2 Willard, Dan E. El algoritmo super- b -tree (Informe técnico). Cambridge, MA: Aiken Computer Lab, Universidad de Harvard. TR-03-79.
- ↑ Chazelle, Bernard (1990). "Límites inferiores para la búsqueda de rango ortogonal: I. El caso de informe" (PDF) . Journal of the ACM . 37 (2): 200– 212. doi : 10.1145/77600.77614 . S2CID 8895683 .
- ↑ Chazelle, Bernard (1990). "Límites inferiores para la búsqueda de rango ortogonal: II. El modelo aritmético" (PDF) . Journal of the ACM . 37 : 439–463 . doi : 10.1145/79147.79149 . S2CID 15935619 .
- 1 2 de Berg, Mark; Cheong, Otfried; van Kreveld, Marc; Overmars, Mark (2008). Geometría Computacional . doi : 10.1007/978-3-540-77974-2 . ISBN 978-3-540-77973-5.
Enlaces externos
- Árboles (estructuras de datos)
- Estructuras de datos geométricos