Documente Academic
Documente Profesional
Documente Cultură
En este tema, nos fijamos en varias estructuras de datos para resolver problemas sobre rboles
estticos: dado un rbol esttico, realizamos algn procesamiento previo para construir nuestra
estructura de datos, a continuacin, utilizar la estructura de datos para responder a las consultas
sobre el rbol. Los tres problemas que miramos En este tema son las bsquedas por rangos mnimos
(RMQ), ms ancestros comunes (LCA), y ancestro nivel (LA); vamos a apoyar todas estas consultas
en tiempo constante por operacin, utilizando el espacio lineal.
1.1 Consulta de Rango Mnimo (RMQ)
En el problema de RMQ, se nos da una matriz A de n nmeros (a preprocesar). En una consulta, el
objetivo es encontrar el elemento mnimo en un rango abarcado por A[i] y A[j]:
RMQ(i, j) = (arg)min{A[i], A[i + 1], . . . , [j]}
= k, donde i k j y A[k] se minimiza
Nos preocupamos no slo por el valor del elemento mnimo, sino tambin sobre el ndice k del
elemento mnimo entre A[i] y A[j]; dado el ndice, es fcil buscar el valor real del elemento mnimo,
por lo que es un problema ms general para encontrar el ndice del elemento mnimo entre A[i] y
A[j].
El problema de RMQ no es manifiestamente un problema de rbol, sino que est estrechamente
relacionado con un problema de rbol (el ms bajo ancestro comn).
Los tres problemas se resolvern en el modelo Word-RAM, aunque el uso de este modelo no es tan
esencial como lo fue en las estructuras de datos enteros que discutimos en temas anteriores. Aunque
LCA y LA parecen problemas similares, tcnicas bastante diferentes son necesarias para resolverlos
(como lo que se sabe). El problema RMQ, sin embargo, es bsicamente idntica a la de encontrar el
ancestro comn ms bajo.
mnimo del subarreglo derecho y es el hijo derecho de la raz. Este procedimiento contina hasta
que consigamos el rbol binario en el siguiente diagrama.
Caminamos hasta la columna derecha del inicio del rbol en 5, y continuamos hasta llegar a 2 (la
raz), que es el primer elemento menor que 3. El arco entre 2 y 4 se sustituye por un nuevo arco 2-3,
y el subrbol anterior derecha de 2 se convierte en el subrbol izquierdo de 3.
Cada una de estas inserciones toma tiempo constante amortizado: aunque a veces los caminos
pueden ser largos, cada insercin slo toca nodos a lo largo de la columna vertebral derecha del
rbol, y cualquier nodo a lo largo de la columna vertebral derecha que ha sido tocado termina en el
subrbol izquierdo del nodo insertado. Cualquier nodo a lo largo de la columna derecha se toca
como mximo una vez, y que puede cargar los insertos caros a la disminucin de la longitud de la
columna derecha.
Por lo tanto, la construccin de rboles cartesianos se puede hacer en el tiempo lineal, incluso en el
modelo de comparacin.
2.2 Reduccin de la LCA a RMQ
Tambin podemos reducir en la otra direccin, desde LCA a RMQ, mediante la reconstruccin de
un arreglo A de un rbol binario T. Para ello, realizamos un recorrido en el orden de los nodos en el
rbol. Sin embargo, debemos tener los nmeros a utilizar como los valores del arreglo; con este fin,
etiquetamos cada nodo con su profundidad en el rbol.
Desde que cada arco es visitado dos veces, tenemos ms entradas en el arreglo que en el recorrido
original, en orden, pero aun as slo O(N). Para responder a LCA(x, y), calcular RMQ(en-orden(x),
en-orden(y)), donde en-orden(x) es la aparicin en orden del nodo x en el arreglo. Estos hechos
pueden ser almacenados durante la creacin del arreglo. Observe que este nuevo arreglo tambin se
puede crear mediante el llenado de los vacos en el arreglo del algoritmo original. As, el mnimo
entre dos valores originales no cambia, y este nuevo algoritmo tambin funciona.
3.3 Tiempo constante, espacio n lg n RMQ
Una estructura de datos simple que puede responder a las consultas RMQ en tiempo constante pero
utiliza slo espacio n lg n, puede ser creada por el preclculo de RMQ para todos los intervalos con
longitudes que sean potencias de 2. Hay un total de O(n lg n) los intervalos, ya que hay lg n
intervalos con longitudes que sean potencias de 2 no ms grandes que n, con n posibles ubicaciones
de partida.
Afirmamos que cualquier intervalo consultado es la (no disjuntos) unin de dos potencias de 2
intervalos. Suponer que la consulta tiene longitud k. Entonces la pregunta puede ser cubierta por los
dos intervalos de longitud 2lg k que tocan el principio y el final de la consulta. La consulta se puede
responder mediante la adopcin del mnimo de las dos respuestas precalculadas. Observe que esto
funciona porque podemos tomar el mnimo de un elemento dos veces sin ningn problema.
Adems, esto tambin nos permite almacenar la ubicacin del elemento mnimo.
3.4 Indireccin para eliminar factores de registro
Hemos visto la indireccin utilizada para eliminar los factores de registro de tiempo, pero aqu
vamos a aplicar indireccin para lograr una cota O(n). Divida el arreglo en grupos inferiores de
tamao
La idea es usar tablas de bsqueda, ya que el nmero total de diferentes arreglos posibles es muy
pequeo.
Observamos que slo tenemos que mirar a los valores relativos en un grupo para encontrar la
ubicacin del elemento mnimo. Esto significa que podemos cambiar todos los valores de modo que
el primer elemento en el grupo es 0. Entonces, una vez que sabemos el destino, podemos buscar en
el arreglo original para encontrar el valor del elemento mnimo.
Ahora vamos a utilizar el hecho de que los elementos del arreglo se diferencian por +1 o -1.
Despus de cambiar el primer valor a 0, ahora hay slo
diferentes grupos inferiores
posibles, desde que todos los grupos son completamente definidos por su larga secuencia n' de +1 y
-1s. Este total de grupos es mucho menor que el nmero actual de grupos!
De hecho, es lo suficientemente pequeo como para que podamos almacenar una tabla de consulta
para cualquiera de los
grupos en
O( (
bits, que cabe fcilmente en O(n) espacio. Ahora, cada grupo puede almacenar
un puntero en la tabla de bsqueda, y todas las consultas pueden ser contestadas en un tiempo
constante con el espacio lineal para el conjunto de los padres, los grupos inferiores, y las tablas.
3.6 Generalizado RMQ
Tenemos LCA usando 1 RMQ en el espacio lineal y tiempo constante. Desde RMQ general, se
puede reducir el uso de reduccin del universo de LCA, tambin tenemos un espacio lineal,
algoritmo RMQ de tiempo constante.
4 Nivel Ancestro (LA)
Primero introducimos la notacin. Sea h(v), la altura de un nodo v en un rbol. Dado un nodo v y el
nivel l, LA(v, l) es el ancestro a de v, tal que h(a) - h(v) = l. Dicho de manera ms simple, subimos
el rbol l niveles desde v y vemos donde terminamos.
Hoy vamos a estudiar una variedad de estructuras de datos con diferentes tiempos de preprocesamiento y de consulta para resolver LA(v, l) consultas. Para una estructura de datos que
requiere f (n) tiempo de consulta y g(n) tiempo de procesamiento previo, vamos a denotar su tiempo
. Los siguientes algoritmos se toman del conjunto encontrado en un
de ejecucin como
artculo de Bender y Farach-Colton [4].
4.1 Algoritmo A:
La idea bsica es usar una tabla de bsqueda con un solo eje correspondiente a los nodos y el otro
eje correspondiente a los niveles. Luego, completamos la tabla utilizando programacin dinmica al
aumentar el nivel. Este es el mtodo de fuerza bruta.
4.2 Algoritmo B:
La idea bsica es utilizar punteros de salto, que son punteros que se almacenan en un nodo y hacen
referencia a uno de los ancestros del nodo. Para cada nodo, creamos punteros de salto a los
antepasados en los niveles 1, 2, 4,. . . , 2k. Las consultas se responden saltando repetidamente desde
un nodo a otro, cada vez que salta ms de la mitad de los niveles restantes entre el ancestro actual y
ancestro meta. Por lo tanto, el nmero del peor caso de saltos est acotada por O(lg n). El
preprocesamiento se realiza mediante el completamiento en los punteros de salto usando
programacin dinmica.
4.3 Algoritmo C:
La idea bsica es usar una descomposicin del camino ms largo, que es una descomposicin en
la que un rbol se divide recursivamente mediante la remocin del camino ms largo que lo
contiene e iterando los subrboles conectados restantes. Cada camino removido se almacena como
un arreglo en orden del camino de arriba a abajo, y cada arreglo tiene un puntero de su primer
elemento (la raz del camino) al mismo padre en el rbol (un elemento del camino-arreglo desde el
nivel recursivo anterior). Una consulta es respondido moviendo hacia arriba en este rbol de
arreglos, atravesando cada arreglo en tiempo O(1). En el peor de los casos la descomposicin del
camino ms largo puede provocar caminos ms largos de tamaos k, k - 1,, 2, 1 por cada uno de
los cuales tiene un solo hijo, lo que resulta en un rbol de arreglos con altura de
. La
construccin de la descomposicin se puede hacer en tiempo lineal precalculando alturas de nodo
una vez, luego volver a utilizar para encontrar los caminos ms largos rpidamente.
4.4 Algoritmo D:
La idea bsica es usar la descomposicin escalera. Esto es similar a la descomposicin del camino
ms largo, pero cada trayectoria se extiende por un factor de dos hacia atrs (hasta el rbol ms all
de la raz del camino ms largo). Si el camino ampliado llega a la raz, que se detenga. Desde la
propiedad escalera, sabemos que el nodo v se encuentra en un camino ms largo de tamao al
menos h(v). Como resultado, uno hace lo sumo O(lg n) saltos de escalera antes de llegar a la raz,
por lo que las consultas se realizan en tiempo O(lg n). El preprocesamiento se realiza de manera
similar al algoritmo C.
4.5 Algoritmo E:
La idea es combinar los punteros de salto (Algoritmo B) y escaleras (Algoritmo D). Cada consulta
utilizar un puntero de salto y una escalera para alcanzar el nodo deseado. En primer lugar un salto
se realiza para conseguir por lo menos hasta la mitad para el antepasado. El nodo salt a ser
contenido en una escalera que tambin contiene el ancestro objetivo, resultando en tiempo de
consulta O(1).
4.6 Algoritmo F:
, pero es
Un algoritmo desarrollado por Dietz [5] tambin resuelve consultas LA en
ms complicado. Aqu se combinan algoritmo E con una reduccin en el nmero de nodos para los
punteros de salto son calculados. La motivacin es que si uno conoce el nivel del antepasado de v
en el nivel l, se conoce el nivel del ancestro de un descendiente de v en el nivel l'. As que calcular
punteros de salto slo para las hojas, lo que garantiza cada nodo tiene un descendiente en este
conjunto. Hasta ahora, el tiempo de preprocesamiento es O(n + L lg n) donde L es el nmero de
hojas. Por desgracia, para un rbol arbitrario, solo tenemos el peor de los casos con cota L = O(n).
4.6.1 Construyendo un rbol con
hojas
posibilidad de una bsqueda en profundidad, hacer el seguimiento de la orientacin del ith arco,
usando 0 hacia abajo y 1 hacia arriba. Un micro-rbol puede describirse mediante una secuencia
binaria, por ejemplo, W = 001001011 donde por un rbol de tamao n, | W | = 2n - 1. As que una
cota superior el nmero de micro-rboles posibles es
. Pero este
es un flojo lmite superior, ya que no todas las secuencias binarias son posibles, por ejemplo,
00000.... A las secuencias de micro-rboles vlida tiene el mismo nmero de ceros y unos y
cualquier prefijo de una secuencia vlida como al menos tantos ceros como unos.
4.6.2 Uso de macro / micro-rbol para un
solucin a LA
de salto slo por sus hojas (tiempo O(n)). Tambin calculamos todos los micro-rboles y sus tablas
Referencias
[1] H. Gabow, J. Bentley, R. Tarjan. Scaling and Related Techniques for Geometry Problems. In
STOC 84: Proc. 16th ACM Symp. Theory of Computing, pages 135-143, 1984.
[2] Dov Harel, Robert Endre Tarjan, Fast Algorithms for Finding Nearest Common Ancestors,
SIAM J. Comput. 13(2): 338-355 (1984)
[3] Michael A. Bender, Martin Farach-Colton, The LCA Problem Revisited, LATIN 2000: 88-94
[4] M. Bender, M. Farach-Colton. The Level Ancestor Problem simplified. Lecture Notes in
Computer Science. 321: 5-12. 2004.
[5] P. Dietz. Finding level-ancestors in dynamic trees. Algorithms and Data Structures, 2nd
Workshop WADS 91 Proceedings. Lecture Notes in Computer Science 519: 32-40. 1991.