Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que...

27
Estructuras de datos Árboles balanceados Dra. Elisa Schaeffer [email protected] PISIS / FIME / UANL ´ Arboles balanceados– p. 1

Transcript of Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que...

Page 1: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

Estructuras de datos

Árboles balanceados

Dra. Elisa Schaeffer

[email protected]

PISIS / FIME / UANL

Arboles balanceados– p. 1

Page 2: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

¿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

Page 3: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 4: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 5: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 6: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 7: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

¿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

Page 8: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 9: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 10: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

Á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

Page 11: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 12: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 13: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

Rotaciones

Rotacion a la izq.

Rotacion a la der.w

w

A

B C A

C

B

v

v

Arboles balanceados– p. 13

Page 14: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 15: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

Á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

Page 16: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 17: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 18: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 19: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 20: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 21: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 22: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

Ejemplo: unión

+

+

splay(+∞, A)

Arboles balanceados– p. 22

Page 23: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 24: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 25: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 26: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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

Page 27: Dra. Elisa Schaeffer · Los arboles biselados´ (inglés: splay tree) son árboles binarios que ofrecen en tiempo O(logn) cualquiera de las operaciones siguientes: búsqueda de una

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