En informática , el problema de búsqueda de rango consiste en procesar un conjunto S de objetos, con el fin de determinar qué objetos de S se intersecan con un objeto de consulta, llamado rango . Por ejemplo, si S es un conjunto de puntos que corresponden a las coordenadas de varias ciudades, encuentre el subconjunto de ciudades dentro de un rango dado de latitudes y longitudes .
Existen diversas variantes del problema y pueden ser necesarias distintas estructuras de datos para cada una de ellas. [1] Para obtener una solución eficiente, es necesario especificar varios aspectos del problema:
Tipos de objetos: Los algoritmos dependen de si S consta de puntos , líneas , segmentos de línea , cajas , polígonos ... Los objetos más simples y estudiados para buscar son los puntos.
Tipos de rangos: los rangos de consulta también deben extraerse de un conjunto predeterminado. Algunos conjuntos de rangos bien estudiados y los nombres de los problemas respectivos son rectángulos alineados con el eje (búsqueda de rangos ortogonales), simples , medios espacios y esferas / círculos .
Tipos de consulta: Si se debe informar la lista de todos los objetos que intersecan el rango de consulta, el problema se denomina informe de rango y la consulta se denomina consulta de informe . A veces, solo se requiere la cantidad de objetos que intersecan el rango. En este caso, el problema se denomina recuento de rango y la consulta se denomina consulta de recuento . La consulta de vacío informa si hay al menos un objeto que interseca el rango. En la versión de semigrupo , se especifica un semigrupo conmutativo ( S ,+), a cada punto se le asigna un peso de S y se requiere informar la suma del semigrupo de los pesos de los puntos que intersecan el rango.
Búsqueda de rango dinámico vs. búsqueda de rango estático: en la configuración estática, el conjunto S se conoce de antemano. En la configuración dinámica, los objetos se pueden insertar o eliminar entre consultas.
Búsqueda de rango fuera de línea: tanto el conjunto de objetos como el conjunto completo de consultas se conocen de antemano.
Estructuras de datos
Búsqueda de rango ortogonal
En la búsqueda de rango ortogonal, el conjunto S consta de puntos en dimensiones, y la consulta consta de intervalos en cada una de esas dimensiones. Por lo tanto, la consulta consta de un rectángulo multidimensional alineado con el eje . Con un tamaño de salida de , Jon Bentley utilizó un árbol kd para lograr (en notación Big O ) espacio y tiempo de consulta. [2] Bentley también propuso usar árboles de rango , que mejoraron el tiempo de consulta a pero aumentaron el espacio a . [3] Dan Willard usó punteros descendentes, un caso especial de cascada fraccionaria para reducir aún más el tiempo de consulta a . [4]
Si bien los resultados anteriores se lograron en el modelo de máquina de puntero , se han realizado mejoras adicionales en el modelo de RAM de palabras de computación en dimensiones bajas (2D, 3D, 4D). Bernard Chazelle utilizó árboles de rangos comprimidos para lograr tiempo y espacio de consulta para el conteo de rangos. [5] Joseph JaJa y otros mejoraron posteriormente este tiempo de consulta para el conteo de rangos, que coincide con un límite inferior y, por lo tanto, es asintóticamente óptimo . [6]
A partir de 2015, los mejores resultados (en dimensiones bajas (2D, 3D, 4D)) para informes de rango encontrados por Timothy M. Chan , Kasper Larsen y Mihai Pătrașcu , también utilizando árboles de rango comprimidos en el modelo de cálculo Word RAM, son uno de los siguientes: [7]
espacio, tiempo de consulta
espacio, tiempo de consulta
espacio, tiempo de consulta
En el caso ortogonal, si uno de los límites es infinito , la consulta se denomina de tres lados. Si dos de los límites son infinitos, la consulta es de dos lados y, si ninguno de los límites es infinito, la consulta es de cuatro lados.
Búsqueda de rango dinámico
Mientras que en la búsqueda de rango estático el conjunto S se conoce de antemano, en la búsqueda de rango dinámico se permiten inserciones y eliminaciones de puntos. En la versión incremental del problema, solo se permiten inserciones, mientras que la versión decremental solo permite eliminaciones. Para el caso ortogonal, Kurt Mehlhorn y Stefan Näher crearon una estructura de datos para la búsqueda de rango dinámico que utiliza cascada fraccionaria dinámica para lograr espacio y tiempo de consulta. [8] Tanto la versión incremental como la decremental del problema se pueden resolver con tiempo de consulta, pero se desconoce si la búsqueda de rango dinámico general se puede realizar con ese tiempo de consulta.
Búsqueda de rango de colores
El problema del conteo de rangos de colores considera el caso en el que los puntos tienen atributos categóricos . Si las categorías se consideran como colores de puntos en el espacio geométrico, entonces una consulta es sobre cuántos colores aparecen en un rango particular. Prosenjit Gupta y otros describieron una estructura de datos en 1995 que resolvió el conteo de rangos de colores ortogonales 2D en el espacio y el tiempo de consulta. [9]
Aplicaciones
Además de tenerse en cuenta en la geometría computacional , la búsqueda de rangos, y en particular la búsqueda de rangos ortogonales, tiene aplicaciones para consultas de rangos en bases de datos . La búsqueda de rangos coloreados también se utiliza para buscar datos categóricos y está motivada por ellos. Por ejemplo, determinar las filas en una base de datos de cuentas bancarias que representan a personas cuya edad está entre 25 y 40 años y que tienen entre $10000 y $20000 podría ser un problema de informe de rangos ortogonales donde la edad y el dinero son dos dimensiones.
^ Agarwal, PK ; Erickson, J. (1999), "Búsqueda de rangos geométricos y sus parientes", en Chazelle, Bernard ; Goodman, Jacob ; Pollack, Richard (eds.), Avances en geometría discreta y computacional: actas de la conferencia de investigación de verano conjunta AMS-IMS-SIAM de 1996, Geometría discreta y computacional: diez años después, 14-18 de julio de 1996, Mount Holyoke College , Contemporary Mathematics, vol. 223, American Mathematical Society Press, págs. 1–56
^ Bentley, Jon (1975). "Árboles de búsqueda binaria multidimensionales utilizados para búsqueda asociativa". Comunicaciones de la ACM . 18 (9): 509–517. doi : 10.1145/361002.361007 . S2CID 13091446.
^ Willard, Dan (1985). "Nuevas estructuras de datos para consultas de rango ortogonal". Revista SIAM de Computación . 14 (1): 232–253. doi :10.1137/0214019.
^ Chazelle, Bernard (1988). "Un enfoque funcional de las estructuras de datos y su uso en la búsqueda multidimensional". Revista SIAM de Informática . 17 (3): 427–462. CiteSeerX 10.1.1.133.9153 . doi :10.1137/0217026.
^ JaJa, Joseph; Mortensen, Christian; Shi, Qingmin (2005). "Algoritmos rápidos y con uso eficiente del espacio para el conteo e informe de dominancia multidimensional". Simposio internacional sobre algoritmos y computación : 558–568.