Articulo de referencia

Árbol de la cordillera

O(n \\log^{d - 1} n) "},"space_worst":{"wt":" O(n \\log^{d - 1} n) "},"search_avg":{"wt":" O(\\log^d n + k) "},"search_worst":{"wt":" O(\\log^d n + k) "}},"i":0}}]}"> En informá...

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 ).O(registrodnorte+k){\displaystyle O(\log ^{d}n+k)}pero peor almacenamiento deO(norteregistrod1norte){\displaystyle O(n\log ^{d-1}n)}donde 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.O(registrod1norte+k){\displaystyle O(\log ^{d-1}n+k)}y complejidad espacialO(norte(registronorteregistroregistronorte)d1){\displaystyle O\left(n\left({\frac {\log n}{\log \log n}}\right)^{d-1}\right)}. [ 5 ] [ 6 ]

Estructura de datos

Un ejemplo de un árbol de rango unidimensional.
Un ejemplo de árbol de rango unidimensional. Cada nodo que no es una hoja almacena el valor más grande de su subárbol izquierdo.

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 enO(norteregistronorte){\displaystyle O(n\log n)}tiempo. 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íaO(norteregistrodnorte){\displaystyle O(n\log ^{d}n)}tiempo.

Este tiempo de construcción se puede mejorar para árboles de rango bidimensionales.O(norteregistronorte){\displaystyle O(n\log n)}[ 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.O(norteregistronorte){\displaystyle O(n\log n)}y también reduce el tiempo para construir un árbol de rango d -dimensional aO(norteregistrod1norte){\displaystyle O(n\log ^{d-1}n)}.

Consultas de rango

Una consulta de rango unidimensional.
Consulta de rango unidimensional [ x1 , x2 ]. Se mostrarán los puntos almacenados en los subárboles sombreados en gris. Se mostrarán los resultados de find( x1 ) y find(x2) si se encuentran dentro del intervalo de consulta .

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 longitudO(registronorte){\displaystyle O(\log n)}. 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 esO(registronorte+k){\displaystyle O(\log n+k)}donde 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 deO(registronorte){\displaystyle O(\log n)}Consultas de rango de ( d -1) dimensiones, se deduce que el tiempo requerido para realizar una consulta de rango de d dimensiones esO(registrodnorte+k){\displaystyle O(\log ^{d}n+k)}donde k es el número de puntos en el intervalo de consulta. Esto se puede reducir aO(registrod1norte+k){\displaystyle O(\log ^{d-1}n+k)}utilizando una variante de cascada fraccionaria . [ 2 ] [ 4 ] [ 7 ]

Véase también

Referencias

  1. 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.
  2. 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 .  
  3. 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 . 
  4. 1 2 Willard, Dan E. El algoritmo super- b -tree (Informe técnico). Cambridge, MA: Aiken Computer Lab, Universidad de Harvard. TR-03-79.
  5. 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 . 
  6. 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 . 
  7. 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.
  • Árboles de rango y segmento en CGAL , la biblioteca de algoritmos de geometría computacional.
  • Lección 8: Árboles de pastizales , Marc van Kreveld. Archivado aquí .
  • Árboles de rangos mediante PAM , la biblioteca de mapas aumentados paralelos.
  • Visualización de árbol de rango 2D , Zhou Kaixuan.
Obtenido de " https://en.wikipedia.org/w/index.php?title=Range_tree&oldid=1318224186 "