Cómo responder a las consultas de rango medio de manera eficiente

En lugar de solo encontrar la mediana, aquí hay un algoritmo eficiente para encontrar el késimo elemento más pequeño en un rango.

Cree un árbol de rango ortogonal bidimensional creado a partir de los N puntos de la forma (A [i], i). La construcción de este árbol se puede hacer fácilmente en tiempo O (N log ^ 2 N) (aunque es posible O (N log N)).

Ahora, para consultar el elemento k, atravesamos la primera dimensión del árbol. Seguimos el subárbol izquierdo si el número de puntos dentro de nuestro rango de índice de consulta en el subárbol izquierdo es menor que k. Esto es simplemente una consulta en el árbol de segunda dimensión del subárbol izquierdo. Si el elemento kth no está en el subárbol izquierdo, ajustamos k adecuadamente y buscamos en el subárbol derecho. Toda esta búsqueda lleva O (N log ^ 2 N) tiempo. Esencialmente, hemos eliminado un factor log N de la solución de Johnny envolviendo la búsqueda binaria en el recorrido del árbol.

En realidad, es posible reducir esto a O (N log N) preprocesamiento y O (log N) por consulta. Pase a aproximadamente las 17:00 en 6.851: Estructuras de datos avanzadas (Spring’12) para ver a Erik Demaine explicar los árboles de rango ortogonales y cómo lograr tiempos de preprocesamiento y consulta más rápidos que requieren una leve inteligencia y una cascada fraccional respectivamente.

Puede procesar estas consultas con la memoria [math] O (n \ log n) [/ math] con el tiempo [math] O (\ log ^ 3 n) [/ math] por consulta creando un árbol de segmentos de conjuntos ordenados. Para cada consulta, busque binariamente la respuesta y cuente sobre estos conjuntos. Necesita consultar log n establece log n veces, y cada consulta lleva log n tiempo, dándole el tiempo de ejecución final de [math] O (\ log ^ 3 n) [/ math]. Dado que esto está fuera de línea, puede usar la cascada fraccional para eliminar un factor de registro, pero no estoy seguro de cómo mejorarlo desde allí.

El árbol de conjuntos ordenados se llama PLANOGRAM para las ubicaciones de memoria de los objetos (por ejemplo, medicina). La búsqueda binaria comienza con la introducción de un RANGO dependiendo de los “suministros” y “demandas”.

More Interesting

Tengo 23 años, quiero ser cantante profesional y quiero aprender música clásica. ¿Es demasiado tarde?

Cómo convertir 25 cm a mm sin usar una regla

¿Cuáles son las aplicaciones de la teoría de autómatas?

En informática y lógica matemática, ¿qué es la capacidad de decisión y en qué se diferencia de la capacidad de computación?

¿SymPy es tan poderoso como Maple / Mathematica para las matemáticas simbólicas?

Dada una matriz sin clasificar que contiene un número impar de ocurrencias para todos los números, excepto un número, ¿cómo se puede encontrar ese número?

¿Existe alguna arquitectura de computadora basada en el cálculo lambda (en lugar de la máquina de Turing)?

¿Cuáles son algunos ejemplos de pruebas matemáticas que contradicen las expectativas?

¿Hay algún problema que requiera más tiempo exponencial de resolución (por ejemplo, doble exp.) Pero que pueda verificarse en tiempo polinómico determinista?

¿Cuáles son algunas áreas activas de investigación dentro de la combinatoria?

¿Qué es un algoritmo para encontrar la mediana de la complejidad en o (n) tiempo?

¿Existe alguna analogía en la vida real con el concepto de expresiones regulares?

¿Por qué el problema indecidible en las máquinas de Turing es interesante desde un sentido práctico?

Cómo resolver la relación de recurrencia T (n + 1) = T (n) + ceil (n + 1) usando la sustitución para hacer un análisis asintótico

¿Qué significa shift / reduce en el análisis?