arboles balanceados

Embed Size (px)

Citation preview

1

Captulo 11

rboles binarios balanceados de bsqueda. AVL.El alto de un rbol es el largo de la trayectoria ms larga de una hoja hasta la raz. Adel'son-Vel'skii y Landis (1962) definieron rboles AVL en los cuales, para cada nodo, el alto del subrbol derecho difiere del alto del subrbol izquierdo a lo ms en uno. El desarrollo del algoritmo muestra la necesidad de un anlisis exhaustivo de los diferentes casos que se presentan. Dicho anlisis facilita la posterior codificacin.

11.1 Anlisis de complejidad.Se define el factor de balance como el alto del subrbol derecho menos el alto del subrbol izquierdo. Entonces en un rbol AVL, todos los nodos cumplen la propiedad de tener valores del factor de balance iguales a: -1, 0, +1. Sea nh el mnimo nmero de nodos en un rbol AVL de altura h dada, que se encuentra en su peor caso de desbalance, si se agrega un nodo, tal que la nueva altura sea (h+1), dejan de ser AVL. Los siguientes diagramas ilustran dichos rboles, denominados de Fibonacci, y los factores de balance de sus nodos, para alturas 0, 1 y 2. Se muestran todos los casos, separados por un eje de simetra; a la derecha del eje se muestran los desbalanceados por la derecha; y a la izquierda los desbalanceados por la izquierda. Las imgenes en ambos lados del eje se obtienen como imgenes especulares de las del otro lado. Lo que se desea encontrar es la altura mxima h de todos los rboles balanceados de n nodos. Para resolver esto se da una altura h determinada y se intenta construir rboles balanceados AVL con el mnimo nmero de nodos, stos son los rboles de Fibonacci.

Profesor Leopoldo Silva Bijit

26-05-2008

2 n0 = 1 n1 = 20

Estructuras de Datos y Algoritmos

-1 0

1 0

h=1

Figura 11.1 rboles Fibonacci AVL, con alturas 0, 1. n2 = 4-1 1 0 0 0 -1 -1 0 0 1 1 0 0 1 -1 0

Figura 11.1.a. rboles Fibonacci AVL, con altura 2. Se cumple que: n2 = n1 + n0 + 1

Se pueden generar 4 rboles de Fibonacci con altura dos. Existen adicionalmente varios rboles AVL de altura dos (los con 5, 6, y 7 nodos) pero se consideran ms balanceados que los de Fibonacci. Para construir el rbol de Fibonacci de altura h, a la raz se agrega un subrbol de altura (h-1) y otro de altura (h-2). La Figura 11.2 ilustra un ejemplo, de los 16 posibles, de la generacin de un rbol de Fibonacci de altura 3, mediante dos subrboles de altura 1 y 2. n3 = 7 Se tiene: n3 = n2 + n1 + 11 1 0 1 0 1 0

h=3

Figura 11.2 Ejemplo rbol AVL Fibonacci, con altura 3. Se destaca el hecho de que estos rboles son el peor caso: logran mxima altura, con el mnimo nmero de nodos.

Profesor Leopoldo Silva Bijit

26-05-2008

rboles balanceados AVL n4 = 12 Se tiene n4 = n3 + n2 + 1

3

Como ejemplo de rbol con altura 4, a la raz se agrega por la derecha un rbol de Fibonacci de altura 3, y por la izquierda uno de altura 2, resulta la Figura 11.3.1

1 0 1 0_ 1 0

1 1 0 1 0

Figura 11.3 rbol AVL Fibonacci, con altura 4. Mediante induccin puede demostrarse que en general, se tiene la recurrencia:

nh

nh

1

nh

2

1 con n0

1 y n1

2

Lo cual implica que un rbol AVL est formado por dos subrboles AVL. La secuencia generada es: 1, 2, 4, 7, 12, 20, 33, 54 para h=0, 1, 2. Empleando el siguiente comando Maple, se puede obtener la solucin de la recurrencia:> n[h]:= rsolve( { n(h) = n(h-1) + n(h-2) + 1, n(0)=1,n(1)=2}, n(h));

El trmino general de la serie n(h) es:

1 nh := 5

1 5 5 1 1 1 5

2 5

1 1h

h

5 2 5 5 1

1 5 5 1 1 5

1 1h

2 5

1 1 5

h

1

2 5

2 1

5

2

5

Evaluado numricamente:

n(h) 1.894427191(1.618033988)h +.1055728091(-.6180339886)h 1El segundo trmino tiende a cero, segn muestra la secuencia: > seq( evalf(subs( h =j, .1055728091*(-.6180339886)^h)), j = 0..6);

Profesor Leopoldo Silva Bijit

26-05-2008

4

Estructuras de Datos y Algoritmos.1055728091 , -.06524758430 , .04032522477 , -.02492235950 , .01540286525 , -.009519494246 , .005883370999

Finalmente, el nmero de nodos en funcin de la altura en un rbol de Fibonacci, resulta:

n(h) 1.894427191(1.618033988) hEl comando solve permite despejar h, en trminos de n. > solve(n=1.894427191*1.618033988^h,h); h (n)= 2.078086923

ln ( .5278640450 n )

Para acotar por arriba, se desea encontrar el valor de la constante c que satisface: c*ln(n)/ln(2)=2.078086923*ln(.5278640450*n) Resulta: c = 1.440420092 El factor que depende de n, tiende a uno: c= limn

ln( .5278640450 n ) ln( n )

1.440420092

ln ( .5278640450 ln ( n )

n)

1.440420092

Lo que tambin se aprecia en la grfica:

Figura 11.4 Cota AVL en funcin de n. Finalmente la altura en un rbol AVL queda acotada por: 1.440420092*log(n) > h(avl) > h(bst) Donde h(bst) es la altura de un rbol de bsqueda binario completamente balanceado: h(bst) = log(n+1)

Profesor Leopoldo Silva Bijit

26-05-2008

rboles balanceados AVL Lo cual demuestra que: h(avl) = (log(n))

5

h=1,44..log(n) altura AVL

altura BST

Figura 11.5 Complejidad de la altura de un rbol AVL. La siguiente grfica muestra la diferencia de altura del rbol AVL, respecto de uno perfectamente balanceado, en funcin de n. Es decir la grfica del cuociente:

2, 07808ln(0,527864n) log 2 (n)

Figura 11.6 Alargue de altura rbol AVL, respecto de perfectamente balanceado Notar que para rboles con menos de 7000 nodos, la altura slo se alarga en cuatro. Otra forma de encontrar la solucin de la recurrencia para n(h), es relacionarla con la secuencia de Fibonacci, para la cual se conoce la solucin. La relacin para la recurrencia de Fibonacci es: F(i) = F(i 1) + F(i 2), F(0) = 0, F(1) = 1 La cual genera: 0, 1, 1, 2, 3, 5, 8, 13, para i=0, 1, 2. En el Ejemplo 4.6, se obtuvo, la solucin:

Profesor Leopoldo Silva Bijit

26-05-2008

6

Estructuras de Datos y Algoritmos

Empleando:

1 2

5

1 1 5 n ( ) 2 5 1 5 . Donde es la razn urea. 1, 61803.. se tiene que: 1 2 F ( n)AC = AB A B C

1 1 5 n ( ) 2 5

Figura 11.6.a. Razn urea . Reemplazando en F(n), n por h, y empleando , se obtiene:

F (h)

1 ( )h 5

1 (1 5

)h

1 ( )h 5

Observando las dos secuencias de nmeros que generan n(h) y F(h), se encuentra: h n(h) F(h) F(h+3) Entonces, se tiene: n(h) = F(h + 3) 1. En forma aproximada, se tiene la solucin para n(h): 0 1 0 2 1 2 1 3 2 4 1 5 3 4 5 6 7 7 12 20 33 54 2 3 5 8 13 8 13 21 34 55

n ( h)

1 5

h 3

1

1 5

3 h 3 h

5

(1,894413.)

h

Resultado igual, al obtenido antes.

11.2. Anlisis de la insercin.La funcin de insercin debe ser modificada para mantener la propiedad de rbol AVL. Existen inserciones que slo implican recalcular los factores de balance, ya que el rbol sigue siendo AVL. Por ejemplo las dos inserciones siguientes, en la Figura 11.7. izquierda, slo modifican los factores de balance de algunos nodos ancestros del insertado, que estn en la trayectoria del recin insertado hacia la raz.

Profesor Leopoldo Silva Bijit

26-05-2008

rboles balanceados AVLrecalculado recalculados 1

7

1

1 0 1 0_ 1 0

1 1 0 1 00

1 0 0 0_ 1 0

1 0 1 0 insertados 1 0

Figura 11.7 Inserciones que slo requieren recalcular factor de balance. 11.2.1. Detencin de revisin en ascenso. a) Al insertar por la izquierda, y en el proceso de ascenso, por la trayectoria desde el nodo recin insertado hacia la raz, 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. La figura 11.8 izquierda, ilustra una situacin general antes de la insercin por la izquierda; la figura 11.8 derecha, muestra despus de la insercin y de la correccin del factor de balance.A h 1

A 0

detener

h -1

h

h

h

Figura 11.8 Detencin de revisin en ascenso. Caso a. 11.2.2. Continuar revisando factores de balance en ascenso. b) Al insertar por la izquierda, y en el proceso de ascenso de revisin 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. Esto debido a que ese nodo cambi su altura; estaba en h y queda en h+1.

Profesor Leopoldo Silva Bijit

26-05-2008

8A 0

Estructuras de Datos y AlgoritmosA -1

continuar

h+1h h

h

Figura 11.9 Continuar revisin en ascenso. Caso b. La Figura 11.9, a la izquierda, ilustra la situacin antes de la insercin por la izquierda; la figura a la derecha muestra despus de la insercin y de la correccin del factor de balance. Pero la insercin deja el subrbol cumpliendo la propiedad AVL. Existen dos casos adicionales, que corresponden a inserciones por la derecha, y pueden visualizarse con las imgenes especulares de las mostradas. 11.2.3. Casos que producen desbalances. Otras inserciones producen desbalances que dejan al subrbol no AVL. Para encontrar en qu situaciones se producen desbalances que rompan la propiedad AVL, basaremos nuestro anlisis en el siguiente subrbol AVL, al cual si se le inserta un nodo en el subrbol derecho, quedar no AVL. Dada la estructura de un rbol AVL, el cual est formado por subrboles AVL, se analiza un rbol AVL de altura dos, pero el anlisis es vlido para cualquier subrbol AVL. Se escoge un caso sencillo para extraer de l, el caso general:1 0 0 0 0

Figura 11.10 rbol AVL, para analizar prdida de propiedad AVL. Trataremos de insertar en posiciones que desbalanceen el rbol, notando que se deben recalcular los factores de balance, a travs de la trayectoria desde el nodo insertado hacia la raz, y si aparece uno con factor 2, se pierde la propiedad AVL. 11.2.3.1. Insercin externa por la derecha. c) Si se inserta nodo F, en la rama externa ms larga del subrbol derecho: La relacin de orden del rbol binario es: A0, se tiene que min(y,0) es cero. Para b>a, se tiene nB= y-1 Observando la siguiente relacin, que puede deducirse de la Figura 11.24 derecha: nB = c-(max(a,b)+1) Entonces nB debe ser la menor de las diferencias posibles: nB = min(c-a-1, c-b-1) Reemplazando (c-a-1) por nB y (c-b-1) por (y-1), se tiene: nB = min(nB, y-1) Finalmente, reemplazando nB, en la expresin en la derecha por x-2+min(y, 0), calculada antes, se obtiene: nB = min(x-2+min(y,0), y-1) El siguiente segmento corrige factores de balance en una rotacin 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 las funciones mnimo y mximo # define max(A,B) ((A)>(B)?(A):(B)) /* Definicin de macro */ # define min(A,B) ((A)>(B)?(B):(A)) Ntese los argumentos de los macros entre parntesis. La rotacin simple a la derecha es la imagen especular del caso recin analizado.

11.5 Operaciones.11.5.1. Definicin de tipos. typedef struct avlnode { int clave; int bal; /* Factor de balance -1,0,1 */ struct avlnode *left, *right; } nodo, *pnodo;

Profesor Leopoldo Silva Bijit

26-05-2008

18 11.5.2. Definicin variables globales: Flag, key, alto_avl.

Estructuras de Datos y Algoritmos

int flag; /* Marca para registrar cambios de altura. En rebalance ascendente */ //flag = 1 indica que debe seguir el ascenso rebalanceando. int key; /* Variable global, para disminuir argumentos */ int alto_avl = 0; /* Altura rbol avl. Nmero de nodos desde la raz a las hojas.*/ 11.5.3. Inserta nodo en sub-rbol apuntado por t. /* Mantiene variable global con el alto del rbol. */ pnodo InsertarAVL(int clave, pnodo t) { key = clave; //pasa argumento a global. t = insertR(t); if (flag == 1) alto_avl++; //si la propagacin llega hasta la raz, aumenta la altura. return t; } tree insertR(tree t) { if (t == NULL){ /* Lleg a un punto de insercin */ t = CreaNodo(key); /* Crea nuevo nodo */ t->bal = 0; /* Los dos hijos son nulos */ flag = 1; /* Marca necesidad de revisar balances */ return t; /* retorna puntero al insertado */ } else if (t->clave < key){ //desciende por la derecha t->right = insertR(t->right); //se pasa por la siguiente lnea en la revisin ascendente t->bal += flag; /* Incrementa factor de balance */ } else if (t->clave > key){ //desciende por la izquierda t->left = insertR(t->left); //se corrige en el ascenso t->bal -= flag; /* Decrementa balance */ } else { /* (t->k == key) Ya estaba en el rbol */ Error(1); flag = 0; } if (flag == 0) /* No hay que rebalancear. Sigue el ascenso */ return t;

Profesor Leopoldo Silva Bijit

26-05-2008

rboles balanceados AVL /*El cdigo a continuacin es el costo adicional para mantener propiedad AVL */ /* Mantiene rbol balanceado avl. Slo una o dos rotaciones por insercin */ if(t->bal < -1) { /* Qued desbalanceado por la izquierda. Espejos casos c y d.*/ if(t->left->bal > 0) /* Si hijo izquierdo est cargado a la derecha */ t->left = lrot(t->left); t = rrot(t); flag = 0; /* El subrbol no aumenta su altura */ } else if(t->bal > 1) { /* Si qued desbalanceado por la derecha. Casos c y d.*/ if(t->right->bal < 0) /* Si hijo derecho est cargado a la izquierda Caso d. Fig. 11.16*/ t->right = rrot(t->right); t = lrot(t); /*caso c.*/ flag = 0; /* El subrbol no aumenta su altura */ } else if(t->bal == 0)/* La insercin lo balanceo */ flag = 0; /* El subrbol no aumenta su altura. Caso a. Fig. 11.8*/ else /* Qued desbalanceado con -1 +1 Caso b. Fig. 11.9 */ flag = 1; /* Propaga ascendentemente la necesidad de rebalancear */ return t; }

19

11.5.4. Descarta nodo en sub-rbol apuntado por t. pnodo DescartarAVL(int clave, pnodo t) { key = clave; t = deleteR(t); if (flag == 1) alto_avl--; return t; } pnodo deleteR(pnodo t) { pnodo p; if(t == NULL) { /* No encontr nodo a descartar */ Error(0); flag = 0; } else if(t->clave < key) { //Comienza el descenso por la derecha t->right = deleteR(t->right); //aqu se llega en el retorno ascendente. t->bal -= flag; /* Se descart por la derecha. Disminuye factor */ Profesor Leopoldo Silva Bijit 26-05-2008

20

Estructuras de Datos y Algoritmos //Se retorna despus de la revisin de los factores } else if (t->clave > key) { //Desciende por la izquierda t->left = deleteR(t->left); //o se llega por esta va si se descart por la izquierda. t->bal += flag; /* se descart por la izq. Aumenta factor de balance */ } else { /* (t->clave == key) */ /* Encontr el nodo a descartar */ if (t->left == NULL) { /*Si hay hijo derecho debe ser hoja, por ser AVL */ p = t; t = t->right; free(p); flag = 1; /* Debe seguir revisando factores de balance */ return t; /* ascendentemente */ } else if (t->right == NULL) { /*Si hay hijo izquierdo debe ser hoja */ p = t; t = t->left; free(p); flag = 1; /* Asciende revisando factores de balance */ return t; /* Corrigiendo */ } else { /* Tiene dos hijos */ if(t->balleft; while (p->right != NULL) p = p->right; t->clave = p->clave; key = p->clave; //busca hoja a eliminar t->left = deleteR(t->left); t->bal += flag; /* incrementa factor de balance */ } else { /* Si cargado a la derecha, elimina menor descendiente hijo der */ p = t->right; while (p->left != NULL) p = p->left; t->clave = p->clave; key = p->clave; t->right = deleteR(t->right); t->bal -= flag; /* decrementa balance */ } } } /* Mantiene rbol balanceado avl. Slo una o dos rotaciones por descarte */ if (flag == 0 ) /* No hay que rebalancear. Sigue el ascenso, sin rebalancear */ return t;

Profesor Leopoldo Silva Bijit

26-05-2008

rboles balanceados AVL /* Hay que revisar factores de balance en el ascenso*/ if(t->bal < -1) { /* Si qued desbalanceado por la izquierda y dej de ser AVL */ if(t->left->bal > 0) { /*espejos casos c, d y e */ /* Si el hijo izquierdo est cargado a la derecha */ t->left = lrot(t->left); flag = 1; /*Continuar revisando factores */ } else if (t->left->bal == 0) flag = 0; /*No debe seguir el rebalance */ else flag = 1;/* Debe seguir revisando factores de balance */ t = rrot(t); } else if(t->bal > 1) { /* Si qued desbalaceado por la derecha */ if(t->right->bal < 0) { /* Si hijo derecho est cargado a la izquierda */ t->right = rrot(t->right); flag = 1; //debe seguir revisando. Caso d. } else if (t->right->bal == 0) flag = 0; /* No debe seguir el rebalance. Caso c. */ else //positivo flag = 1;/* Debe seguir revisando factores de balance. Caso e. */ t = lrot(t); } else if (t->bal == 0) /* Si estaba en +1 -1 y queda en cero */ flag = 1; /* Debe seguir corrigiendo. Caso b.*/ else /* Si estaba en cero y queda en -1 +1 */ flag = 0; /* No debe seguir rebalanceando. Caso a.*/ return t; } 11.5.5. Rotaciones. /* Rotacin Izquierda * * A B * / \ / \ * a B ==> A c * / \ / \ * b c a b * Slo cambian los factores de balance de los nodos A y B * Los factores de balance de los sub-rboles no cambian. */

21

Profesor Leopoldo Silva Bijit

26-05-2008

22 static pnodo lrot(pnodo t) { pnodo temp; int x,y; temp = t; t = t->right; temp->right = t->left; t->left = temp; //Recalcula factores de balance de los dos nodos x = temp->bal; // oldbal(A) y = t->bal; // oldbal(B) temp->bal = x-1-max(y, 0); t->bal = min(x-2+min(y, 0), y-1); return t; }

Estructuras de Datos y Algoritmos

/* Rotacin derecha * * A * / \ * B c * / \ * a b * */ static pnodo rrot(pnodo t) { tree temp = t; int x,y;

==>

B / \ a A / \ b c

t = t->left; temp->left = t->right; t->right = temp; x = temp->bal; y = t->bal; /* x=c-1-a x=c-1-b. y = b-a * nA = c-b. nB =c+1-a nB=b+1-a * nA= x+1-y o nA=x+1-0 * nA = x+1-min(y,0) * nB = max(b,c)+1-a => max(b-a+1,c-a+1) * => max(y+1,x+2+max(y,0)) */ temp->bal = x+1-min(y, 0); t->bal = max(x+2+max(y, 0), y+1); return t; }

Profesor Leopoldo Silva Bijit

26-05-2008

rboles balanceados AVL 11.5.6. Otras funciones. static void Error(int tipo) { if (tipo) printf("\nError en insercin\n"); else printf("\nError en descarte\n"); } int Altura(void) { return alto_avl; } pnodo deltree(pnodo t) //borra el rbol completo { alto_avl = 0; return deltreeR(t); } pnodo deltreeR(pnodo t) { if (t != NULL) { t->left = deltreeR(t->left); t->right = deltreeR(t->right); free(t); //borra la raz subrbol } return NULL; } void inorder(pnodo t, int profundidad) { if (t != NULL) { inorder(t->left, profundidad+1); printf ("v= %d p=%d bal=%d \n", t->clave, profundidad, t->bal); inorder(t->right, profundidad+1); } }

23

Profesor Leopoldo Silva Bijit

26-05-2008

24

Estructuras de Datos y Algoritmos

Problemas resueltos.P11.1. Para el siguiente rbol AVL7

3 4

8

1

Figura P11.1. a) Indique los factores de balance de cada nodo. b) Dibujar el rbol AVL, despus de la insercin de un nodo con valor 2. Qu operaciones se efectan?. c) Habiendo ya insertado el nodo con valor 2, dibujar el rbol AVL, despus de la insercin de un nodo con valor 6. Qu operaciones se efectan?. Solucin. a) Los factores de balance:-1 7

0 0

3 4

0 0

8

1

Figura P11.2. b) Luego de insertar el 2, no queda AVL. Con una rotacin simple a la derecha, se reestablece la propiedad AVL.+1 3 -1 7

-2

7 -1

0

3

+1 1

3 +1 2 4 0

8 0

0

+1 1 0 2 0

0

7

0

2

+1 4 6

8

0

1

4

8

0

0

Figura P11.3.

Profesor Leopoldo Silva Bijit

26-05-2008

rboles balanceados AVL c) La insercin del 6, no requiere rotaciones para mantener la propiedad AVL.

25

Ejercicios propuestos.E11.1 Dado el siguiente rbol AVL:8

4

12

2

7 35

9

14

1

11

13

15

1Figura E11.1. a) Determinar el rbol y el factor de balance de cada nodo despus de Insertar nodos con valores 6 y 10. Especificar las operaciones elementales para mantener el balance, indicando cmo queda el rbol. b) Determinar el rbol y el factor de balance de cada nodo despus de Descartar nodos con valores 13, 14, 15, 9 y 11. Especificar las operaciones elementales para mantener el balance, indicando cmo queda el rbol. Nota: en a) y b) se parte del rbol dado. Son situaciones independientes.

Referencias.Niklaus Wirth, Algorithms + Data Structures = Programs, Prentice-Hall 1975. G.M. Adel'son-Vel'skii and E.M. Landis. An algorithm for the organization of information. Soviet Mathematics Monthly, Volume 3, pp.1259-1263, 1962.

Profesor Leopoldo Silva Bijit

26-05-2008

26

Estructuras de Datos y Algoritmos

ndice general.CAPTULO 11 ............................................................................................................................................1 RBOLES BINARIOS BALANCEADOS DE BSQUEDA. AVL. ......................................................1 11.1 ANLISIS DE COMPLEJIDAD. ..............................................................................................................1 11.2. ANLISIS DE LA INSERCIN. .............................................................................................................6 11.2.1. Detencin de revisin en ascenso. ...........................................................................................7 11.2.2. Continuar revisando factores de balance en ascenso. .............................................................7 11.2.3. Casos que producen desbalances. ............................................................................................811.2.3.1. Insercin externa por la derecha. ....................................................................................................... 8 11.2.3.2. Insercin interna por la derecha. ....................................................................................................... 9

11.3.4. Rotaciones para mantener propiedad AVL. .............................................................................911.3.4.1. Correccin con rotacin simple en insercin................................................................................... 10 11.3.4.2. Correccin con rotacin doble en insercin. ................................................................................... 11

11.3. ANLISIS DEL DESCARTE DE UN NODO. ..........................................................................................12 11.3.1. Detencin de la revisin de los factores de balance en el descarte. ......................................12 11.3.2. Continuar revisando factores de balance en el descarte. ......................................................13 11.3.3. Rotacin simple para corregir desbalance en descarte. Detener revisin.............................13 11.3.4. Rotacin doble para corregir el desbalance en descarte. ......................................................14 11.3.5. Rotacin simple para corregir desbalance en descarte. Continuar revisin. ........................14 11.4. ROTACIN SIMPLE A LA IZQUIERDA. ...............................................................................................15 11.5 OPERACIONES. ................................................................................................................................17 11.5.1. Definicin de tipos. ................................................................................................................17 11.5.2. Definicin variables globales: Flag, key, alto_avl. ..............................................................18 11.5.3. Inserta nodo en sub-rbol apuntado por t. ............................................................................18 11.5.4. Descarta nodo en sub-rbol apuntado por t. .........................................................................19 11.5.5. Rotaciones. .............................................................................................................................21 11.5.6. Otras funciones. .....................................................................................................................23 PROBLEMAS RESUELTOS. ........................................................................................................................24 P11.1. Para el siguiente rbol AVL ...................................................................................................24 EJERCICIOS PROPUESTOS. ........................................................................................................................25 E11.1 Dado el siguiente rbol AVL: ..................................................................................................25 REFERENCIAS. .........................................................................................................................................25 NDICE GENERAL. ....................................................................................................................................26 NDICE DE FIGURAS. ................................................................................................................................27

Profesor Leopoldo Silva Bijit

26-05-2008

rboles balanceados AVL

27

ndice de figuras.Figura 11.1 rboles Fibonacci AVL, con alturas 0, 1................................................................... 2 Figura 11.1.a. rboles Fibonacci AVL, con altura 2. ................................................................... 2 Figura 11.2 Ejemplo rbol AVL Fibonacci, con altura 3. ............................................................. 2 Figura 11.3 rbol AVL Fibonacci, con altura 4. .......................................................................... 3 Figura 11.4 Cota AVL en funcin de n. ........................................................................................ 4 Figura 11.5 Complejidad de la altura de un rbol AVL. ............................................................... 5 Figura 11.6 Alargue de altura rbol AVL, respecto de perfectamente balanceado ....................... 5 Figura 11.6.a. Razn urea . ........................................................................................................ 6 Figura 11.7 Inserciones que slo requieren recalcular factor de balance. ..................................... 7 Figura 11.8 Detencin de revisin en ascenso. Caso a.................................................................. 7 Figura 11.9 Continuar revisin en ascenso. Caso b....................................................................... 8 Figura 11.10 rbol AVL, para analizar prdida de propiedad AVL. ............................................ 8 Figura 11.11 rbol no AVL, despus de insercin externa por la derecha. .................................. 9 Figura 11.12 rbol no AVL, despus de insercin interna por la derecha. .................................. 9 Figura 11.13 rbol AVL de Figura 11.11, despus de rotacin simple a la izquierda. .............. 10 Figura 11.14 rbol AVL de la figura 11.12, despus de doble rotacin. .................................... 10 Figura 11.15 Generalizacin de caso c). Rotacin simple. ......................................................... 11 Figura 11.16 Generalizacin de caso d). ..................................................................................... 11 Figura 11.17 Generalizacin de caso d). Doble rotacin. ........................................................... 12 Figura 11.18 Descarte por izquierda. Se mantiene AVL. Caso a. ............................................... 13 Figura 11.19 Descarte por izquierda. Se mantiene AVL. Caso b. ............................................... 13 Figura 11.20 Descarte por rama izquierda. Deja de ser AVL. Caso c......................................... 14 Figura 11.21 Descarte por rama izquierda. Deja de ser AVL. Caso d. ....................................... 14 Figura 11.22 Descarte por izquierda. Deja de ser AVL. Caso e.................................................. 15 Figura 11.23 Rotacin simple a la izquierda. .............................................................................. 15 Figura 11.24 Anlisis de los factores de balance. ....................................................................... 16 Figura P11.1. ............................................................................................................................... 24 Figura P11.2. ............................................................................................................................... 24 Figura P11.3. ............................................................................................................................... 24 Figura E11.1. ............................................................................................................................... 25

Profesor Leopoldo Silva Bijit

26-05-2008