En informática , el problema de consulta de rango consiste en responder de manera eficiente a varias consultas sobre un intervalo de elementos dentro de un arreglo . Por ejemplo, una tarea común, conocida como consulta de mínimo de rango , consiste en encontrar el valor más pequeño dentro de un rango dado en una lista de números.
Definición
Dada una funciónque acepta una matriz, una consulta de rangoen una matriztoma dos índicesyy devuelve el resultado decuando se aplica al subconjunto. Por ejemplo, para una funciónque devuelve la suma de todos los valores en una matriz, la consulta de rangodevuelve la suma de todos los valores en el rango.
Soluciones
Matriz de suma de prefijos
Las consultas de suma de rangos pueden responderse en tiempo constante y espacio lineal precalculando una matriz p de la misma longitud que la entrada, de modo que para cada índice i , el elemento p i sea la suma de los primeros i elementos de a . Cualquier consulta puede calcularse entonces de la siguiente manera:
Esta estrategia puede extenderse a cualquier otra operación binaria.cuya función inversaestá bien definido y es fácilmente computable. [ 1 ] También puede extenderse a dimensiones superiores con un preprocesamiento similar. [ 2 ] Por ejemplo, si p i,j contiene la suma de los primeros i × j elementos de a , entonces
Consultas de rango dinámico
Un subconjunto más complejo del problema consiste en ejecutar consultas de rango sobre datos dinámicos; es decir, datos que pueden modificarse entre cada consulta. Para actualizar eficientemente los valores de los arrays, se requieren estructuras de datos más sofisticadas, como el árbol de segmentos o el árbol de Fenwick .
Ejemplos
Operadores de semigrupo

Cuando la función de interés en una consulta de rango es un operador de semigrupo , la noción deno siempre está definido, por lo que la estrategia de la sección anterior no funciona. Andrew Yao demostró [ 3 ] que existe una solución eficiente para consultas de rango que involucran operadores de semigrupo. Demostró que para cualquier constante c , un preprocesamiento de tiempo y espaciopermite responder consultas de rango en listas donde f es un operador de semigrupo entiempo, dondees una cierta inversa funcional de la función de Ackermann .
Hay algunos operadores de semigrupo que admiten soluciones ligeramente mejores. Por ejemplo, cuando. Asumirentoncesdevuelve el índice del elemento mínimo de. Entoncesdenota la consulta de rango mínimo correspondiente. Existen varias estructuras de datos que permiten responder a una consulta de rango mínimo entiempo utilizando un preprocesamiento de tiempo y espacioUna de esas soluciones se basa en la equivalencia entre este problema y el problema del ancestro común más bajo .
El árbol cartesianode una matriztiene como raízy como subárboles izquierdo y derecho el árbol cartesiano dey el árbol cartesiano derespectivamente. Una consulta de rango mínimoes el ancestro común más bajo endey. Porque el ancestro común más bajo se puede resolver en tiempo constante utilizando un preprocesamiento de tiempo y espacio., la consulta de rango mínimo también puede. La solución cuandoes análogo. Los árboles cartesianos se pueden construir en tiempo lineal .
Modo
La moda de un array es el elemento que aparece con mayor frecuencia en él. Por ejemplo, la moda dees4. En caso de empate, cualquiera de los elementos más frecuentes podría ser elegido como la moda. Una consulta de modo de rango consiste en un preprocesamientode tal manera que podamos encontrar la moda en cualquier rango deSe han ideado varias estructuras de datos para resolver este problema; resumimos algunos de los resultados en la siguiente tabla. [ 1 ]
Recientemente, Jørgensen et al. demostraron un límite inferior en el modelo de sonda celular depara cualquier estructura de datos que utilice celdas S. [ 4 ]
Mediana
Este caso particular es de especial interés ya que encontrar la mediana tiene varias aplicaciones. [ 5 ] Por otro lado, el problema de la mediana, un caso especial del problema de selección , es resoluble en O ( n ), utilizando el algoritmo de la mediana de medianas . [ 6 ] Sin embargo, su generalización a través de consultas de mediana de rango es reciente. [ 7 ] Una consulta de mediana de rangodonde A, i y j tienen los significados habituales devuelve el elemento mediano de. De forma equivalente,debería devolver el elemento dede rangoLas consultas de mediana de rango no se pueden resolver siguiendo ninguno de los métodos anteriores discutidos anteriormente, incluido el enfoque de Yao para operadores de semigrupo. [ 8 ]
Se han estudiado dos variantes de este problema: la versión fuera de línea , donde todas las k consultas de interés se proporcionan en un lote, y una versión donde todo el preprocesamiento se realiza por adelantado. La versión fuera de línea se puede resolver contiempo yespacio.
El siguiente pseudocódigo del algoritmo quickselect muestra cómo encontrar el elemento de rango r enuna matriz no ordenada de elementos distintos, para encontrar las medianas de rango que establecemos. [ 7 ]
rangoMediana(A, i, j, r) { si A.length() == 1, devolver A[1] Si A.low no está definido, entonces m = mediana(A) A.bajo = [e en A | e <= m] A.alto = [e en A | e > m ] Calcula el número de elementos de A[i, j] que pertenecen a A.low Si r <= t, entonces devuelve rangeMedian(A.low, i, j, r); de lo contrario, devuelve rangeMedian(A.high, i, j, rt). }El procedimiento rangeMediandivide A, usando Ala mediana de , en dos arreglos A.lowy A.high, donde el primero contiene los elementos de Aque son menores o iguales a la mediana my el segundo el resto de los elementos de A. Si sabemos que el número de elementos deque terminan en A.lowes ty este número es mayor que rentonces deberíamos seguir buscando el elemento de rango ren A.low; de lo contrario deberíamos buscar el elemento de rangoen A.high. Para encontrar t , basta con encontrar el índice máximo.de tal manera queestá en A.lowy el índice máximode tal manera que está en A.high. EntoncesEl costo total de cualquier consulta, sin considerar la parte de particionamiento, esya que como máximoLas llamadas recursivas se realizan y solo se lleva a cabo un número constante de operaciones en cada una de ellas (para obtener el valor de t se debe utilizar la cascada fraccionaria ). Si se utiliza un algoritmo lineal para encontrar las medianas, el costo total del preprocesamiento para k consultas de mediana de rango es. El algoritmo también puede modificarse para resolver la versión en línea del problema. [ 7 ]
Mayoría
Encontrar elementos frecuentes en un conjunto dado de elementos es una de las tareas más importantes en la minería de datos. Encontrar elementos frecuentes puede ser una tarea difícil de lograr cuando la mayoría de los elementos tienen frecuencias similares. Por lo tanto, podría ser más beneficioso si se utilizara algún umbral de significancia para detectar dichos elementos. Uno de los algoritmos más famosos para encontrar la mayoría de un arreglo fue propuesto por Boyer y Moore [ 9 ] , también conocido como el algoritmo de votación mayoritaria de Boyer-Moore . Boyer y Moore propusieron un algoritmo para encontrar el elemento mayoritario de una cadena (si tiene uno) entiempo y uso espacio. En el contexto del trabajo de Boyer y Moore y en términos generales, un elemento mayoritario en un conjunto de elementos (por ejemplo, una cadena o una matriz) es aquel cuyo número de instancias es más de la mitad del tamaño de ese conjunto. Unos años más tarde, Misra y Gries [ 10 ] propusieron una versión más general del algoritmo de Boyer y Moore utilizandocomparaciones para encontrar todos los elementos en una matriz cuyas frecuencias relativas sean mayores que un cierto umbral.. Una gama-La consulta mayoritaria es aquella que, dado un subrango de una estructura de datos (por ejemplo, una matriz) de tamaño, devuelve el conjunto de todos los elementos distintos que aparecen más que (o en algunas publicaciones igual a)veces en ese rango dado. En diferentes estructuras que admiten rango-consultas mayoritarias,puede ser estático (especificado durante el preprocesamiento) o dinámico (especificado en el momento de la consulta). Muchos de estos enfoques se basan en el hecho de que, independientemente del tamaño del rango, para un dadopodría haber como máximocandidatos distintos con frecuencias relativas al menos. Al verificar cada uno de estos candidatos en tiempo constante, Se logra el tiempo de consulta. Un rango-la consulta de mayoría es descomponible [ 11 ] en el sentido de que una-mayoría en un rangocon particionesydebe ser un-mayoría en cualquiera de los dosoDebido a esta descomponibilidad, algunas estructuras de datos responden-Consultas de mayoría en matrices unidimensionales mediante la búsqueda del ancestro común más bajo (LCA) de los puntos finales del rango de consulta en un árbol de rango y la validación de dos conjuntos de candidatos (de tamaño) desde cada punto final hasta el ancestro común más bajo en tiempo constante, lo que resulta entiempo de consulta.
Matrices bidimensionales
Gagie et al. [ 12 ] propusieron una estructura de datos que admite rango-mayoría de consultas en un formación. Para cada consultaen esta estructura de datos un umbraly un rango rectangularse especifican, y el conjunto de todos los elementos que tienen frecuencias relativas (dentro de ese rango rectangular) mayores o iguales ase devuelven como resultado. Esta estructura de datos admite umbrales dinámicos (especificados en el momento de la consulta) y un umbral de preprocesamiento.sobre la cual se construye. Durante el preprocesamiento, se construye un conjunto de intervalos verticales y horizontales sobre la base dematriz. Juntos, un intervalo vertical y uno horizontal forman un bloque. Cada bloque es parte de un superbloque nueve veces más grande que él mismo (tres veces el tamaño del intervalo horizontal del bloque y tres veces el tamaño del vertical). Para cada bloque, un conjunto de candidatos (conelementos como máximo) se almacena que consiste en elementos que tienen frecuencias relativas al menos(el umbral de preprocesamiento mencionado anteriormente) en su respectivo superbloque. Estos elementos se almacenan en orden no creciente según sus frecuencias y es fácil ver que cualquier elemento que tenga una frecuencia relativa al menosEn un bloque debe aparecer su conjunto de candidatos. Cada-La consulta mayoritaria se responde primero encontrando el bloque de consulta, o el bloque más grande que está contenido en el rectángulo de consulta proporcionado entiempo. Para el bloque de consulta obtenido, el primeroLos candidatos son devueltos (sin ser verificados) entiempo, por lo que este proceso podría devolver algunos falsos positivos. Muchas otras estructuras de datos (como se analiza a continuación) han propuesto métodos para verificar cada candidato en tiempo constante y, por lo tanto, mantener eltiempo de consulta sin devolver falsos positivos. Los casos en los que el bloque de consulta es menor quese manejan almacenandodiferentes instancias de esta estructura de datos de la siguiente forma:
dóndees el umbral de preprocesamiento de la-ésima instancia. Por lo tanto, para bloques de consulta más pequeños queelSe consulta la instancia -ésima. Como se mencionó anteriormente, esta estructura de datos tiene tiempo de consulta. y requierebits de espacio almacenando una copia codificada de Huffman (tenga en cuenta elfactor y también ver codificación de Huffman ).
Matrices unidimensionales
Chan et al. [ 13 ] propusieron una estructura de datos que, dado un arreglo unidimensional,, una subrangode(especificado en el momento de la consulta) y un umbral(especificado en el momento de la consulta), es capaz de devolver la lista de todos-mayorías entiempo requeridopalabras de espacio. Para responder a tales consultas, Chan et al. [ 13 ] comienzan señalando que existe una estructura de datos capaz de devolver los k elementos más frecuentes en un rango entiempo requeridopalabras de espacio. Para una matriz unidimensional, sea una consulta de rango top-k unilateral de la forma. Para un rango máximo de rangosen la que la frecuencia de un elemento distintoenpermanece sin cambios (y es igual a), se construye un segmento de línea horizontal. El-el intervalo de este segmento de línea corresponde ay tiene un-valor igual a. Desde que se agrega cada elemento acambia la frecuencia de exactamente un elemento distinto, el proceso mencionado anteriormente creasegmentos de línea. Además, para una línea verticalTodos los segmentos de línea horizontales que la intersecan se ordenan según sus frecuencias. Tenga en cuenta que cada segmento de línea horizontal con-intervalocorresponde exactamente a un elemento distintoen, de tal manera queUna consulta top-k puede responderse entonces disparando un rayo vertical.y reportando el primerosegmentos de línea horizontales que la intersecan (recuerde de arriba que estos segmentos de línea ya están ordenados según sus frecuencias) entiempo.
Chan et al. [ 13 ] primero construyen un árbol de rango en el que cada nodo de ramificación almacena una copia de la estructura de datos descrita anteriormente para consultas top-k de rango unilateral y cada hoja representa un elemento deLa estructura de datos top-k en cada nodo se construye en función de los valores existentes en los subárboles de ese nodo y está diseñada para responder a consultas top-k de rango unilateral. Tenga en cuenta que para una matriz unidimensional, se puede construir un árbol de rangos dividiendoen dos mitades y recursivamente en ambas mitades; por lo tanto, cada nodo del árbol de rangos resultante representa un rango. También se puede observar que este árbol de rangos requierepalabras de espacio, porque hayniveles y cada niveltienenodos. Además, puesto que en cada nivelde un árbol de rango todos los nodos tienen un total deelementos deen sus subárboles y puesto que hayniveles, la complejidad espacial de este árbol de rango es.
Utilizando esta estructura, una gama-consulta mayoritariaenconse responde de la siguiente manera. Primero, el ancestro común más bajo (LCA) de los nodos hojayse encuentra en tiempo constante. Tenga en cuenta que existe una estructura de datos que requierebits de espacio que son capaces de responder a las consultas LCA entiempo. [ 14 ] Dejedenotamos el ACV dey, usandoy según la descomponibilidad del rango-consultas de mayoría (como se describe anteriormente y en [ 11 ] ), la consulta de rango bilateralse puede convertir en dos consultas top-k de rango unilateral (desdeay). Estas dos consultas de rango unilateral top-k devuelven los top-() elementos más frecuentes en cada uno de sus respectivos rangos entiempo. Estos elementos frecuentes conforman el conjunto de candidatos para-mayorías enen los que haycandidatos algunos de los cuales podrían ser falsos positivos. Cada candidato se evalúa luego en tiempo constante utilizando una estructura de datos de espacio lineal (como se describe en el Lema 3 en [ 15 ] ) que es capaz de determinar en tiempo si un subrango dado de una matrizcontiene al menosinstancias de un elemento en particular.
senderos arbolados
Gagie et al. [ 16 ] propusieron una estructura de datos que admite consultas tales que, dados dos nodosyen un árbol, pueden informar la lista de elementos que tienen una frecuencia relativa mayor queen el camino desdea. Más formalmente, dejemossea un árbol etiquetado en el que cada nodo tiene una etiqueta de un alfabeto de tamaño. Dejardenota la etiqueta del nodoen. Dejardenota el camino único desdeaenen el que los nodos intermedios se enumeran en el orden en que se visitan. Dadoy un umbral fijo (especificado durante el preprocesamiento), una consultadebe devolver el conjunto de todas las etiquetas que aparecen más de tiempos en.
Para construir esta estructura de datos, primeroLos nodos están marcados . Esto se puede hacer marcando cualquier nodo que tenga una distancia al menosdesde la parte inferior de los tres (altura) y cuya profundidad es divisible porDespués de hacer esto, se puede observar que la distancia entre cada nodo y su ancestro marcado más cercano es menor que. Para un nodo marcado,diferentes secuencias (caminos hacia la raíz)se almacenan,
paradóndedevuelve la etiqueta del padre directo del nodoDicho de otro modo, para cada nodo marcado, se almacena el conjunto de todos los caminos con una longitud que sea potencia de dos (más uno para el propio nodo) hacia la raíz. Además, para cada, el conjunto de todos los candidatos mayoritariosse almacenan. Más específicamente,contiene el conjunto de todos-mayorías eno etiquetas que aparecen más detiempos enEs fácil ver que el conjunto de candidatospuede tener como máximoetiquetas distintas para cada. Gagie et al. [ 16 ] luego señalan que el conjunto de todos-mayorías en la ruta desde cualquier nodo marcadoa uno de sus antepasadosestá incluido en algunos(Lema 2 en [ 16 ] ) ya que la longitud dees igual apor lo tanto existe unparacuya longitud es entredóndees la distancia entre x y z. La existencia de talimplica que un-mayoría en el camino desdeadebe ser un-mayoría eny por lo tanto debe aparecer enEs fácil ver que esta estructura de datos requierepalabras de espacio, porque como se mencionó anteriormente en la fase de construcciónLos nodos están marcados y para cada nodo marcado se almacenan algunos conjuntos candidatos. Por definición, para cada nodo marcadode tales conjuntos son almacenes, cada uno de los cuales contienecandidatos. Por lo tanto, esta estructura de datos requierepalabras de espacio. Tenga en cuenta que cada nodotambién tiendasque es igual al número de instancias deen el camino desdea la raíz deEsto no aumenta la complejidad espacial, ya que solo agrega un número constante de palabras por nodo.
Cada consulta entre dos nodosypuede responderse utilizando la propiedad de descomponibilidad (como se explicó anteriormente) de rango-consultas mayoritarias y rompiendo la ruta de consulta entreyen cuatro subrutas. Dejeser el ancestro común más bajo dey, conysiendo los antepasados marcados más cercanos deyrespectivamente. El camino desdease descompone en los caminos desdeyayrespectivamente (el tamaño de estos caminos es menor quepor definición, todos los cuales se consideran candidatos), y los caminos desdeya(al encontrar el adecuado)como se explicó anteriormente y considerando todas sus etiquetas como candidatas). Tenga en cuenta que los nodos límite deben manejarse de manera adecuada para que todos estos subcaminos sean disjuntos y de todos ellos se pueda obtener un conjunto deSe derivan los candidatos. Luego, cada uno de estos candidatos se verifica utilizando una combinación de losconsulta que devuelve el ancestro más bajo del nodoque tiene etiquetay elcampos de cada nodo. En un-bit RAM y un alfabeto de tamaño, elLa consulta puede ser respondida entiempo mientras que se tienen requisitos de espacio lineales. [ 17 ] Por lo tanto, verificar cada uno de loscandidatos enel tiempo resulta entiempo total de consulta para devolver el conjunto de todos-mayorías en el camino desdea.
Problemas relacionados
Todos los problemas descritos anteriormente se han estudiado para dimensiones superiores, así como sus versiones dinámicas. Por otro lado, las consultas de rango podrían extenderse a otras estructuras de datos como árboles , [ 8 ] como el problema del ancestro de nivel . Una familia similar de problemas son las consultas de rango ortogonales , también conocidas como consultas de conteo.
Véase también
Referencias
- 1 2 Krizanc, Danny; Morin, Pat ; Smid, Michiel HM (2003). "Consultas de rango de modo y rango de mediana en listas y árboles" . ISAAC : 517–526 . arXiv : cs/0307034 . Bibcode : 2003cs........7034K .
- ↑ Meng, He; Munro, J. Ian; Nicholson, Patrick K. (2011). "Selección de rango dinámico en espacio lineal". ISAAC : 160–169 . arXiv : 1106.5076 .
- ↑ Yao, Andrew C. (1982). "Compensación espacio-temporal para responder consultas de rango (Resumen extendido)". Actas del decimocuarto simposio anual de la ACM sobre Teoría de la Computación - STOC '82 . págs. 128–136 . doi : 10.1145/800070.802185 . ISBN 0-89791-070-2.
- ^ Greve, Marcos; Jørgensen, Allan Grønlund; Larsen, Kasper Dalgaard; Truelsen, Jakob (2010). "Límites inferiores de la sonda celular y aproximaciones para el modo de rango". Autómatas, Lenguajes y Programación . Apuntes de conferencias sobre informática. vol. 6198. págs. 605– 616. doi : 10.1007/978-3-642-14165-2_51 . ISBN 978-3-642-14164-5.
- ^ Har-Peled, Sariel; Muthukrishnan, S. (2008). "Medianas de rango". Algoritmos - ESA 2008 . Apuntes de conferencias sobre informática. vol. 5193. págs. 503– 514. arXiv : 0807.0222 . doi : 10.1007/978-3-540-87744-8_42 . ISBN 978-3-540-87743-1.
- ↑ Blum, M. ; Floyd, RW ; Pratt, VR ; Rivest, RL ; Tarjan, RE (agosto de 1973). "Límites de tiempo para la selección" (PDF) . Journal of Computer and System Sciences . 7 (4): 448– 461. doi : 10.1016/S0022-0000(73)80033-9 .
- 1 2 3 Gfeller, Beat; Sanders, Peter (2009). "Hacia medianas de rango óptimas". Autómatas, lenguajes y programación . Notas de clase en ciencias de la computación. Vol. 5555. págs. 475–486 . arXiv : 0901.1761 . doi : 10.1007/978-3-642-02927-1_40 . ISBN 978-3-642-02926-4.
- 1 2 Bose, Prosenjit; Kranakis, Evangelos; Morin, Pat; Tang, Yihui (2005). "Consultas aproximadas de moda y mediana de rango" (PDF) . Stacs 2005. Lecture Notes in Computer Science. Vol. 3404. pp. 377–388 . doi : 10.1007/978-3-540-31856-9_31 . ISBN 978-3-540-24998-6.
- ↑ Boyer, Robert S.; Moore, J. Strother (1991). "MJRTY: Un algoritmo rápido de votación por mayoría" . Razonamiento automatizado . Serie de razonamiento automatizado. Vol. 1. Dordrecht: Springer Netherlands. págs. 105–117 . doi : 10.1007/978-94-011-3488-0_5 . ISBN 978-94-010-5542-0. Consultado el 18 de diciembre de 2021 .
- ↑ Misra, J.; Gries, David (noviembre de 1982). "Finding repeated elements" . Science of Computer Programming . 2 (2): 143– 152. doi : 10.1016/0167-6423(82)90012-0 . hdl : 1813/6345 . ISSN 0167-6423 .
- ^ Karpiński , Marek. Buscando colores frecuentes en rectángulos . OCLC 277046650 .
- ↑ Gagie, Travis; He, Meng; Munro, J. Ian; Nicholson, Patrick K. (2011). "Finding Frequent Elements in Compressed 2D Arrays and Strings" . String Processing and Information Retrieval . Lecture Notes in Computer Science. Vol. 7024. Berlín, Heidelberg: Springer Berlin Heidelberg. pp. 295–300 . doi : 10.1007/978-3-642-24583-1_29 . ISBN 978-3-642-24582-4. Consultado el 18 de diciembre de 2021 .
- 1 2 3 Chan, Timothy M.; Durocher, Stephane; Skala, Matthew; Wilkinson, Bryan T. (2012). "Estructuras de datos en espacio lineal para consultas de minoría de rango en arreglos" . Algorithm Theory – SWAT 2012. Lecture Notes in Computer Science. Vol. 7357. Berlín, Heidelberg: Springer Berlin Heidelberg. pp. 295–306 . doi : 10.1007/978-3-642-31155-0_26 . ISBN 978-3-642-31154-3. Consultado el 20 de diciembre de 2021 .
- ↑ Sadakane, Kunihiko; Navarro, Gonzalo (17 de enero de 2010). «Árboles sucintos totalmente funcionales». Actas del Vigésimo Primer Simposio Anual ACM-SIAM sobre Algoritmos Discretos . Filadelfia, PA: Society for Industrial and Applied Mathematics. págs. 134–149 . doi : 10.1137/1.9781611973075.13 . ISBN 978-0-89871-701-3. S2CID 3189222 .
- ↑ Chan, Timothy M.; Durocher, Stephane; Larsen, Kasper Green; Morrison, Jason; Wilkinson, Bryan T. (2013-03-08). "Estructuras de datos de espacio lineal para consultas en modo rango en matrices" . Theory of Computing Systems . 55 (4): 719– 741. doi : 10.1007/s00224-013-9455-2 . ISSN 1432-4350 . S2CID 253747004 .
- 1 2 3 Gagie, Travis; He, Meng; Navarro, Gonzalo; Ochoa, Carlos (septiembre de 2020). "Estructuras de datos de mayoría de ruta de árbol" . Theoretical Computer Science . 833 : 107–119 . arXiv : 1806.01804 . doi : 10.1016/j.tcs.2020.05.039 . ISSN 0304-3975 .
- ↑ He, Meng; Munro, J. Ian; Zhou, Gelin (2014-07-08). "Un marco para árboles ordinales etiquetados sucintos sobre alfabetos grandes" . Algorithmica . 70 (4): 696– 717. doi : 10.1007/s00453-014-9894-4 . ISSN 0178-4617 . S2CID 253977813 .
Enlaces externos
- Estructuras de datos abiertas - Capítulo 13 - Estructuras de datos para números enteros
- Estructuras de datos para consultas de rango medio - Gerth Stolting Brodal y Allan Gronlund Jorgensen
- Matrices