Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que...
Transcript of Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que...
Estructuras de datos
Árboles balanceados
Dra. Elisa Schaeffer
PISIS / FIME / UANL
Arboles balanceados– p. 1
¿Balance?
Las operaciones de insertar y remover claves modifican laforma del árbol.
La garantía de tiempo de acceso O (log n) está solamenteválida a árboles balanceados.
Arboles balanceados– p. 2
Balance perfecto
Un árbol está perfectamente balanceadosi suestructura es óptima con respeto al largo del camino de laraíz a cada hoja:Todas las hojas están en el mismo nivel, es decir, ellargo máximo de tal camino es igual al largo mínimo de talcamino sobre todas las hojas.
Esto es solamente posible cuando el número de hojas es2k para k ∈ Z
+, en que caso el largo de todos los caminosdesde la raíz hasta las hojas es exactamente k.
Arboles balanceados– p. 3
Rotaciones
Necesitamos operaciones para “recuperar” la formabalanceada después de inserciones y eliminaciones deelementos, aunque no cada operación causa una falta debalance en el árbol.
Estas operaciones se llaman rotaciones.
Arboles balanceados– p. 4
Rotaciones básicas
Rotacion simple izquierda Rotacion simple derecha
Rotacion doble izquiera-derecha Rotacion doble derecha-izquierda
t u
vu t
v
B B
A
A
A A
t
t
B
B
u v
u
v
A
u
t
v
w
A
v
t
w
u
B1 B2
B1 B2
t
B B
w
w
A1 A2
A1 A2
vu
u
t v
Arboles balanceados– p. 5
Elección de rotación
La rotación adecuada está elegida según las alturas de losramos que están fuera de balance, es decir, tienendiferencia de altura mayor o igual a dos.
Si se balancea después de cada insercion yeliminacion siempre y cuando es necesario, la diferenciaserá siempre exactamente dos.
Arboles balanceados– p. 6
¿Porqué dos?
Sean los hijos de t que están fuera de balance u y v.
A(u) ≥ A(v) + 2 :
A(A) ≥ A(B) ⇒
rotación simple a la derecha,
A(A) < A(w) ⇒
rotación doble izquierda-derecha,
A(u) ≤ A(v)− 2 :
A(A) ≥ A(B) ⇒
rotación simple a la izquierda,
A(B) < A(w) ⇒
rotación doble derecha-izquierda.
Arboles balanceados– p. 7
Punto de rotación
Con esas rotaciones, ninguna operación va a aumentar laaltura de un ramo, pero la puede reducir por una unidad.
La manera típica de encontrar el punto de rotación t esregresar hacía la raíz después de haber operado con unahoja para verificar si todos los vértices en camino todavíacumplan con la condición de balance.
Arboles balanceados– p. 8
Análisis de las rotaciones
Búsqueda de una hoja ∈ O (log n)
La operación en la hoja ∈ O (1)
La “vuelta” hacía la raíz ∈ O (log n)
Cada rotación en sí ∈ O (1)
Si al ejecutar una rotación, la altura de t cambia, habráque continuar hacía la raíz porque otras faltas de balancepueden técnicamente haber resultado.
Si no hay cambio en la altura de t, no hay necesidad decontinuar más arriba en el árbol.
Arboles balanceados– p. 9
Árboles rojo-negro
Otro tipo de árboles binarias son los arboles rojo-negro(inglés: red-black tree) .
También ofrecen tiempo de acceso y actualizaciónO (log n) y se balancea por rotaciones.
En vez de la condición AVL, se identifica vértices fuera debalance por asignar colores a los vertices.
Arboles balanceados– p. 10
Propiedades
(I) Cada vértice tiene exactamente uno de los doscolores: rojo y negro.
(II) La raíz es negro.
(III) Cada hoja es negro.
(IV) Si un vértice es rojo, sus ambos hijos son negros.
(V) Para cada vértice v, todos los caminos de v a susdescendientes contienen el mismo número de nodosnegros.
Arboles balanceados– p. 11
Altura
Aplica para los árboles rojo-negro que su altura es
O (log n)
y que la expresión exacta tiene cota superior
2 log2(n+ 1)
Arboles balanceados– p. 12
Rotaciones
Rotacion a la izq.
Rotacion a la der.w
w
A
B C A
C
B
v
v
Arboles balanceados– p. 13
Operaciones
Al insertar hojas nuevas o eliminar vértices, además de lasrotaciones para restaurar balance, puede hacer faltarecolorear algunos vértices en el camino desde la hojanueva hasta la raíz.
Las posibles violaciones son de dos tipos: vértices deruteo rojos que llegan a tener un hijo rojo por lasrotaciones y la raíz siendo un vértice rojo por rotaciones.
Es una idea buena implementar esto en una subrutina quese invoca después de cada inserción y otra para invocardespués de cada eliminación.
Arboles balanceados– p. 14
Árboles biselados
Los arboles biselados(inglés: splay tree) son árbolesbinarios que ofrecen en tiempo O (log n) cualquiera de lasoperaciones siguientes:
búsqueda de una clave
inserción de una clave
eliminación de una clave
unión de árboles
división de árboles
Arboles balanceados– p. 15
Propiedades
En un árbol biselado cada vertice contiene a una clave ylas claves en el ramo izquierdo son menores que la clavedel vértice mismo, mientras a la derecha están las clavesmayores.
Las claves son unicas.Las operaciones no cuidan ni restauran balance.
Arboles balanceados– p. 16
Las claves mismas son los datos
En este caso, no hay ningun dato asociado a unaclave.
=⇒ Una búsqueda por la clave ℓ tiene salidas “sí” (en elcaso que la clave está presente en el árbol) y “no” (en elcaso que la clave no está incluido).
Arboles balanceados– p. 17
Unión y división
Para aplicar una union, todas las claves de uno de los dosárboles tienen que ser menores a la clave mínima del otro.
La division corta un árbol a dos árboles tal que todas lasclaves de uno de los árboles que resultan son menores oiguales a una clave dada como parámetro y las mayoresestán en el otro árbol.
Arboles balanceados– p. 18
La operación splay
La operacion basicautilizada para implementar todasestas operaciones es splay(ℓ, A).
Lo que hace splay es convertir el árbol A a tal forma queel vértice con claveℓ es la raız, si presente, y en laausencia de ℓ en A, la raíz será
max {k ∈ A | ℓ > k} (1)
si A contiene claves menores a ℓ y mın {k ∈ A} en otrocaso.
El orden de las claves después de la operación cumple elmismo requisito de orden de las claves.
Arboles balanceados– p. 19
Implementaciones
busqueda deℓ enA: ejecuta splay(ℓ, A). Si la raíz enel resultado es ℓ, la salida es “sí”, en otro caso “no”.
union deA1 conA2: se supone que las claves de A1
son todos menores que la clave mínima de A2.Ejecutamos splay(∞, A1) para lograr que la raíz deA1 modificado es su clave máxima y todos los otrosvértices están en el ramo izquierdo. Hacemos que A2
sea el ramo derecho.
division deA con la claveℓ: ejecutamos splay(ℓ, A).Los dos árboles resultantes serán tal que A1 contienesolamente el ramo derecho de la raíz y A2 el resto delA modificado.
Arboles balanceados– p. 20
Implementaciones
eliminacion deℓ deA: divide A con la clave ℓ. Si resultaque ℓ es la raíz, quítalo y ejecuta la unión de los dosramos sin ℓ. Si ℓ no es la raíz, solamente vuelve ajuntar A1 como el ramo derecho de A2.
insercion deℓ enA: ejecuta la división de A con ℓ. Si ℓya es la raíz, solamente vuelve a juntar A1 como elramo derecho de A2. Si no lo es, crea un vértice raíznuevo con la clave ℓ y haz A2 su ramo derecho y A1 suramo izquierdo.
Arboles balanceados– p. 21
Ejemplo: unión
+
+
splay(+∞, A)
Arboles balanceados– p. 22
Implementación de splay(v)
Comenzamos como cualquier busquedade v en un árbolbinario ordenado desde la raíz utilizando el hecho que lasclaves pequeñas están a la izquierda y las grandes a laderecha.
Al terminar la búsqueda en un vértice v, empezamosrotacionespara mover v hacıa la raız sin mezclar elorden de las claves.
Arboles balanceados– p. 23
Rotaciones básicas
Rotacion simple izquierda Rotacion simple derecha
Rotacion doble izquiera-derecha Rotacion doble derecha-izquierda
t u
vu t
v
B B
A
A
A A
t
t
B
B
u v
u
v
A
u
t
v
w
A
v
t
w
u
B1 B2
B1 B2
t
B B
w
w
A1 A2
A1 A2
vu
u
t v
Arboles balanceados– p. 24
Rotaciones para splay
Las rotaciones se elige según las relaciones entre unvértice v y su padre y “abuelo”.
Si v tiene padrepero no tiene abuelo, elegimos unarotación simple derecha.
Así v llega al ser la raíz en el último paso.
Arboles balanceados– p. 25
Rotaciones dobles
Si v tiene un padreu y un abuelow, hay varios casos.
Si v y u on hijos derechos, elegimos una rotacióndoble derecha-derecha.
Si son hijos izquierdos, una rotación dobleizquierda-izquierda que es la misma pero “por espejo”.
En el caso que otro de v y u es un hijo izquierdo y elotro derecho, elegimos una de las rotaciones doblesbásicas.
Arboles balanceados– p. 26
Rotación doble derecha-derecha
rotate(y)rotate(x)
x
A B
y
C
z
D
DC
y
B
x
zA
Arboles balanceados– p. 27