elo320 estructuras de datos y algoritmos...

30
13: Arboles AVL 1 ELO320 Estructuras de Datos y Algoritmos Arboles Binarios AVL Tomás Arredondo Vidal Este material está basado en: Robert Sedgewick, "Algorithms in C", (third edition), Addison-Wesley, 2001 Thomas Cormen et al, “Algorithms”, (eighth edition), MIT Press, 1992. material del curso ELO320 del Prof. Leopoldo Silva material en el sitio http://es.wikipedia.org

Upload: others

Post on 29-Mar-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 1

ELO320 Estructuras de Datos y Algoritmos

Arboles Binarios AVL

Tomás Arredondo Vidal

Este material está basado en:

❒ Robert Sedgewick, "Algorithms in C", (third edition), Addison-Wesley, 2001 ❒ Thomas Cormen et al, “Algorithms”, (eighth edition), MIT Press, 1992.❒ material del curso ELO320 del Prof. Leopoldo Silva❒ material en el sitio http://es.wikipedia.org

Page 2: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 2

13-Árboles Binarios AVL

13.1 Definiciones y tipos de datos13.2 Cálculos de complejidad13.3 Análisis de inserción13.4 Análisis de descarte13.5 Análisis de rotación

Page 3: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 3

Definiciones

❒ El alto de un árbol es el largo de la trayectoria más larga de una hoja hasta la raíz.

❒ Adel'son-Vel'skii y Landis (1962) definieron árboles AVL en los cuales, para cada nodo, el alto del subárbol derecho difiere del alto del subárbol izquierdo a lo más en uno.

❒ El desarrollo del algoritmo muestra la necesidad de un análisis exhaustivo de los diferentes casos que se presentan.

❒ Se define el factor de balance como el alto del subárbol derecho menos el alto del subárbol izquierdo.

❒ Entonces en un árbol AVL, todos los nodos cumplen la propiedad de tener valores del factor de balance iguales a: -1, 0, ó +1.

Page 4: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 4

13-Árboles Binarios AVL

13.1 Definiciones y tipos de datos13.2 Cálculos de complejidad13.3 Análisis de inserción13.4 Análisis de descarte13.5 Análisis de rotación

Page 5: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 5

Complejidad: árboles AVL

❒ Sea nh el número de nodos en un árbol AVL de altura hdada, que esta en su peor caso de desbalance.

❒ Los siguientes diagramas ilustran dichos árboles y los factores de balance de sus nodos

❒ Se muestran los casos desbalanceados por la derecha, los de la izquierda son especulares.

❒ Lo que se desea encontrar es la altura h de todos los árboles AVL de n nodos con su máximo grado de desbalance.

❒ n0= 1

❒ n1= 2

❒ n2 = 4n2=n1+n0+1

❒ n3 = 7n3=n2+n1+1

h=2

Page 6: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 6

Complejidad: árboles AVL II

❒ Mediante inducción puede demostrarse que en general para un árbol AVL (con máximo grado de desbalance+1 o -1):

nh = nh-1 + nh-2 + 1Dado n0 = 1 y n1 = 2

❒ Lo que implica que un árbol AVL está formado por dos subárboles AVL.

❒ La secuencia generada es nh = 1, 2, 4, 7, 12, 20, 33, 54…para h = 0, 1, 2, 3….

❒ n4 = 12n4= n3 + n2 + 1

h=4

Page 7: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 7

Complejidad: árboles AVL III

❒ La secuencia generada es nh = 1, 2, 4, 7, 12, 20, 33, 54… para h = 0, 1, 2, 3….

❍ Como la secuencia de Fibonnaci Fn = Fn-1 + Fn-2, F0 = 0 y F1 = 1❒ Evaluando numéricamente (e.g. Maple evalf):

n(h) = 1.894427191(1.618033988)h + 0.1055728091(-.6180339886)h - 1 ❒ El segundo termino tiende a cero, resolviendo numéricamente (e.g.

Maple solve):h(n) = 2.078086923ln (.5278640450 n)

❒ Para acotar por arriba, se desea encontrar el valor de la constante c que satisface: c*log2(n)=2.078086923*ln(.5278640450*n)

Page 8: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 8

Complejidad: árboles AVL IV

❒ Usando un método numérico: c=1.440420092

❒ Finalmente la altura en un árbol AVL queda acotada por: 1.440420092*log2(n) > h(avl) > h(bst)

❒ Lo cual demuestra que: h(avl) = Θ(log2(n))

❒ Graficando el alargue vs un árbol binario balanceado dado n:

2.078086923ln (.5278640450 n) / log2(n)

Page 9: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 9

13-Árboles Binarios AVL

13.1 Definiciones y tipos de datos13.2 Cálculos de complejidad13.3 Análisis de inserción13.4 Análisis de descarte13.5 Análisis de rotación

Page 10: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 10

Análisis de inserción

❒ La función de inserción debe ser modificada para mantener la propiedad de árbol AVL.

❒ Existen inserciones que sólo implican recalcular los factores de balance, ya que el árbol sigue siendo AVL.

❒ Por ejemplo las dos inserciones sólo modifican los factores de balance de algunos nodos ancestros del insertado, que están en la trayectoria del recién insertado hacia la raíz.

❒ Se van a mostrar dos casos de inserción por la izquierda, existen casos equivalentes (especulares) de inserción por la derecha.

Page 11: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 11

Análisis de inserción: caso a

❒ a) Al insertar por la izquierda, y en el proceso de ascenso, por la trayectoria desde el nodo recién insertado hacia la raíz, revisando los factores de balance, si se llega a un nodo con factor uno, basta corregir el factor de ese nodo (quedando éste en 0) y no es preciso seguir corrigiendo en el ascenso. Esto debido a que ese nodo no cambiará su altura; estaba en h y queda en h.

❒ Se ilustra este caso a continuación:

Page 12: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 12

Análisis de inserción: caso b

❒ b) Al insertar por la izquierda, y en el proceso de ascenso de revisión de los factores de balance, si se llega a un nodo con factor cero, debe corregirse el factor de ese nodo (quedando éste en menos uno) y es preciso seguir el ascenso corrigiendo factores de balance. Esto debido a que ese nodo cambió su altura; estaba en h y queda en h+1.

❒ Se ilustra este caso a continuación:

Page 13: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 13

Análisis de inserción: caso c

❒ Se analiza un árbol AVL de altura dos, pero el análisis es válido para cualquier subárbol AVL. Se escoge un caso sencillo para extraer el caso general:

❒ c) Si se inserta nodo F, en la rama externa más larga del subárbol derecho: La relación de orden del árbol binario es: A<B<C<D<E<F

❒ Se trata igual el caso: F<E. ❒ Se detecta la pérdida de propiedad AVL, para

este caso, cuando el factor de balance de un nodo recalculado después de la inserción es +2, y el factor de balance del hijo derecho de éste es positivo.

❒ Inserciones de nodos con valores menores que B, mejoran los factores de balance, mantienen la propiedad AVL, y no existe necesidad de corregir. Han sido tratados en los casos a y b.

Page 14: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 14

Análisis de inserción: caso d

❒ d) Si se inserta nodo D, en la rama interna más larga del subárbol derecho. Con orden: A<B<C<D<E<F

❒ Se trata igual el caso D<C.❒ Esta situación se detecta cuando el

factor de balance de un nodo es +2, y el factor de balance del hijo derecho de éste es negativo.

❒ Inserciones de nodos con valores menores que B, mejoran los factores de balance, mantienen la propiedad AVL, y no existe necesidad de corregir.

Page 15: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 15

Corrección para mantener AVL: caso c

❒ El caso c) requiere una reestructuración de los nodos para mantener la propiedad AVL. Manteniendo la relación de orden: A<B<C<D<E<F, se denomina rotación simple a la izquierda, la que deja al subárbol, según:

Page 16: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 16

Corrección para mantener AVL: caso d

❒ El caso d) también requiere reestructurar para mantener el árbol con la propiedad AVL.

❒ Se corrige con una doble rotación. Primero una a la derecha, que hace ascender C y luego otra a la izquierda, que hace ascender C hasta la raíz:

❒ En ambas se conserva la relación de orden: A<B<C<D<E<F❒ Existen dos casos adicionales al c) y el d), que corresponden a

inserciones por la izquierda, y pueden visualizarse con las imágenes especulares de las mostradas.

Page 17: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 17

Rotaciones en AVL: generalización caso c

❒ Se puede generalizar, el caso c). La primera figura muestra la situación antes de agregar un nodo en el subárbol derecho de B. La figura al centro muestra el árbol desbalanceado, no AVL. A la derecha se muestra después de una rotación simple a la izquierda, la cual mejora el balance y genera un árbol AVL.

Page 18: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 18

Rotaciones en AVL: generalización caso d

❒ El caso d) también se puede generalizar. La primera figura muestra la situación antes de agregar un nodo en el subárbol izquierdo o derecho del nodo B. La segunda figura muestra el árbol no AVL:

Page 19: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 19

Rotaciones en AVL: generalización caso d❒ Lo cual se corrige, con una rotación a la derecha, que hace ascender B

y luego otra a la izquierda para llevar B a la raíz del subárbol, produciendo un árbol AVL.

❒ No es necesario seguir revisando los factores de balance de los nodos superiores a la raíz del subárbol, ya que éste queda con factor de balance 0. El alto de ese nodo es (h+1), antes y después de la inserción y las correcciones.

Page 20: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 20

13-Árboles Binarios AVL

13.1 Definiciones y tipos de datos13.2 Cálculos de complejidad13.3 Análisis de inserción13.4 Análisis de descarte13.5 Análisis de rotación

Page 21: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 21

Análisis de descarte: caso a❒ Se descarta en forma similar a un árbol binario. Sin embargo, debido a

la propiedad AVL, si el nodo a descartar tiene un solo subárbol (derecho o izquierdo), ese subárbol debe ser una hoja.

❒ Luego del descarte, debe ascenderse para mantener los factores de balance de la trayectoria hacia la raíz, hay varios casos de esto. Debido a simetría sólo se analizan casos de descarte por la izquierda.

❒ Caso a) Al descartar por la izquierda, y en el proceso de ascenso de revisión de los factores de balance, si se llega a un nodo con factor cero, basta corregir el factor de ese nodo (quedando éste en +1) y no es preciso seguir el ascenso. Esto debido a que ese nodo no cambiarásu altura; estaba en h y queda en h.

Page 22: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 22

Análisis de descarte: caso b❒ Caso b) Al descartar por la izquierda, y en el proceso de revisión de los

factores de balance, si se llega a un nodo con factor menos uno, se debe corregir el factor de ese nodo (quedando éste en cero) y es preciso seguir revisando en la vía de ascenso. Esto debido a que ese nodo cambió su altura de (h+1) a h.

Page 23: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 23

Análisis de descarte: caso c❒ En la situación de la figura a la izquierda, se descarta por la izquierda.

La figura central muestra la situación, y la necesidad de rebalancearpor pérdida de propiedad AVL. Lo cual se logra con una rotación a la izquierda, que se muestra en la figura de la derecha, generando un árbol AVL. No es preciso seguir la revisión ascendente, ya que el subárbol, no cambia su altura.

Page 24: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 24

Análisis de descarte: caso d❒ En la situación de la figura a la izquierda, se descarta por la izquierda.

La figura central muestra la situación, y la necesidad de rebalancearpor pérdida de propiedad AVL. Lo cual se logra con una doble rotación (primero a la derecha, luego a la izquierda). Es preciso seguir la revisión ascendente, ya que el subárbol, cambia su altura de (h+1) a h.

Page 25: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 25

Análisis de descarte: caso e❒ En la situación de la figura a la izquierda, se descarta por la izquierda.

La figura central muestra la situación, y la necesidad de rebalancearpor pérdida de propiedad AVL. Lo cual se logra con una rotación a la izquierda. Es preciso seguir la revisión ascendente, ya que el subárbol cambia su altura, de (h+1) antes del descarte a h.

❒ Se puede discernir entre los casos d y e, observando el hijo derecho del nodo que pasó a tener factor de balance dos. Esto implica que la función descartar debe analizar 10 casos. Cinco en descartes por la izquierda y 5 por la derecha.

Page 26: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 26

13-Árboles Binarios AVL

13.1 Definiciones y tipos de datos13.2 Cálculos de complejidad13.3 Análisis de inserción13.4 Análisis de descarte13.5 Análisis de rotación

Page 27: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 27

Análisis de rotación: simple a la izquierda❒ Al inicio t apunta a la raíz del subárbol.❒ Luego de temp = t y t = t->right, queda la figura de la izquierda.❒ Luego de temp->right = t->left; y t->left = temp queda la figura de la

derecha.❒ La corrección de los factores de balance se puede efectuar según:

temp->bal =0 y t->bal =0

Page 28: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 28

Análisis de rotación: rutina general❒ Para lograr una rutina general de rotación se analiza la siguiente

situación.❒ Sean a, b y c los altos de los subárboles, que no cambian. ❒ Antes de la rotación, los factores de balance de los nodos A y B son x e

y, respectivamente; luego de la rotación éstos se denominan: nA y nB.❒ Se desea determinar nA y nB en términos de x e y.❒ La rotación simple a la derecha es la imagen especular de este caso.

Page 29: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 29

Análisis de rotación: calculo de nA❒ En la figura izquierda se cumple: y = c-b, x=b+1-a si b>c, o x=c+1-a si c>b❒ En la figura de la derecha se cumplen, por la definición del factor de

balance: nA= b-a, nB= c-1-a si a>b, o nB=c-1-b si b>a. ❒ Cálculo de nA: ❒ Para b>c, remplazando se obtienen: nA=x-1-0 o bien para c>b: nA=x-1-y ❒ Las últimas dos ecuaciones pueden anotarse: nA=x-1-max(y,0) ❒ Calculo de nB:❒ Para a>b, se tiene nB=x-2+y o si b>c se tiene nB=x-2+0. Las dos

relaciones anteriores pueden anotarse: nB=x-2+min(y, 0) ❒ Juntando ambos resultados: nB = min(x-2+min(y,0), y-1)

Page 30: ELO320 Estructuras de Datos y Algoritmos …profesores.elo.utfsm.cl/~tarredondo/info/datos-algoritmos...Existen dos casos adicionales al c) y el d), que corresponden a inserciones

13: Arboles AVL 30

Análisis de rotación: código❒ El siguiente segmento corrige factores de balance en una

rotación simple a la izquierda: x = temp->bal; // oldbal(A) y = t->bal; // oldbal(B) temp->bal = x-1-max(y, 0); // newbal(A) t->bal = min(x-2+min(y, 0), y-1); // newbal(B)

� Los siguientes macros implementan min( ) y max( ) # define max(A,B) ((A)>(B)?(A):(B)) /* Definición de macros */ # define min(A,B) ((A)>(B)?(B):(A))❒ Para el resto del código ver: avl-tree.c