Professional Documents
Culture Documents
Captulo 11
20-01-2010
n0 = 1
n1 = 2
-1
h=1
-1
1
-1
1
0
-1
0
n2 = n1 + n0 + 1
1
0
h=3
1
0
20-01-2010
n4 = 12
Se tiene n4 = n3 + n2 + 1
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
1
nh
nh
nh
1 con n0 1 y n1
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));
1
n h :=
2
5
1
5
5
2
1
1
5
5
1
h
1
1
5
5
2
5
5
2
1
1
1
5
5
Evaluado numricamente:
20-01-2010
n(h) 1.894427191(1.618033988)h
El 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:
ln ( .5278640450 n )
ln ( n )
c = 1.440420092
El factor que depende de n, tiende a uno:
c=
lim
n
1.440420092
ln ( .5278640450
ln ( n )
n)
1.440420092
20-01-2010
5
h(avl) = (log(n))
h=1,44..log(n)
altura AVL
altura BST
2, 07808ln(0,527864n)
log 2 (n)
20-01-2010
1 1 5 n
(
)
2
5
F ( n)
Empleando:
5
2
1 1 5 n
(
)
2
5
5
2
. Donde
es la razn urea.
AC
=
AB
A
F ( h)
1
( )h
5
1
(1
5
1
( )h
5
)h
Observando las dos secuencias de nmeros que generan n(h) y F(h), se encuentra:
h
n(h)
F(h)
F(h+3)
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
Entonces, se tiene:
n(h) = F(h + 3) 1.
En forma aproximada, se tiene la solucin para n(h):
n( h)
1
5
h 3
1
5
3
h 3
(1,894413.)
20-01-2010
recalculados
recalculado
1
1
0
1
0_
1
0
0
0
0_
0
1
insertados
h -1
detener
20-01-2010
-1
continuar
h+1
0
0
20-01-2010
9
2
0
-1
1
0
0
20-01-2010
10
0
0
0
1
0
E
0
Figura 11.13 rbol AVL de Figura 11.11, despus de rotacin simple a la izquierda.
El caso d) de la Figura 11.12, tambin requiere reestructurar para mantener el rbol con la
propiedad AVL.
Se corrige con una doble rotacin. Primero una a la derecha, que hace ascender C (la situacin
despus de esta rotacin, se muestra en la parte izquierda de la Figura 11.14) y luego otra a la
izquierda, que hace ascender C hasta la raz, despus de la cual se muestra en la Figura 11.14 a
la derecha.
2
0
B
2
C
0
-1
0
0
0
0
E
0
20-01-2010
11
B
0
2
B
B
1
h
h
positivo
h+1
h+1
negativo
C
-1
0
B
-1
B
0
h
h-1
h
h
h-1
h-1
20-01-2010
12
A
B
0
2
B
A
C
1
1
h
h
h
h-1
h-1
h
20-01-2010
13
A
h-1
h+1
-1
20-01-2010
14
cero
-1
A
B
0
h-1
h
h
h-1
Figura 11.20 Descarte por rama izquierda. Deja de ser AVL. Caso c.
11.3.4. Rotacin doble para corregir el desbalance en descarte.
d) En la situacin de la figura 11.21 a la izquierda, se descarta por la izquierda. La figura central
muestra la situacin, y la necesidad de rebalancear por prdida de propiedad AVL. Lo cual se
logra con una doble rotacin (primero a la derecha, luego a la izquierda). Es preciso seguir la
revisin ascendente, ya que el subrbol, cambia su altura de (h+1) a h.
A
B
0
negativo
C
-1
-1
B
0
h-1
h-1
B
0
h-1
h-1
h-2
h-1
h-1
h-1
h-1
h-1
h-1
h-2
h-2
Figura 11.21 Descarte por rama izquierda. Deja de ser AVL. Caso d.
11.3.5. Rotacin simple para corregir desbalance en descarte. Continuar revisin.
e) En la situacin de la figura a la izquierda, se descarta por la izquierda. La figura central
muestra la situacin, y la necesidad de rebalancear por prdida de propiedad AVL. Lo cual se
logra con una rotacin a la izquierda. Es preciso seguir la revisin ascendente, ya que el
subrbol cambia su altura, de (h+1) antes del descarte a h.
20-01-2010
h-1
15
positivo
B
B
1
h
h-1
0
A
0
h-1
h-1
h-1
h-1
temp
temp
B
a
0
A
1
b
c
a
h
h
h+1
h
h+1
20-01-2010
16
temp
temp
nB
nA
a
b
c
a
20-01-2010
17
nB=x-2+min(y, 0)
Lo cual puede comprobarse, ya que si y es negativo (para b>c) se tiene que min(y,0) es y; si
y>0, 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;
20-01-2010
18
20-01-2010
19
20-01-2010
20
20-01-2010
21
20-01-2010
22
/* 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;
}
20-01-2010
23
20-01-2010
24
Problemas resueltos.
P11.1. Para el siguiente rbol AVL
7
8
4
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
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
-2
-1
+1 1
-1
+1 1
+1
0
1
Figura P11.3.
20-01-2010
+1 4
25
Ejercicios propuestos.
E11.1 Dado el siguiente rbol AVL:
8
12
7
3
14
11
13
15
1
Figura 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.
20-01-2010
26
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. ............................................................................................8
11.2.3.1. Insercin externa por la derecha. ....................................................................................................... 8
11.2.3.2. Insercin interna por la derecha. ....................................................................................................... 9
20-01-2010
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
20-01-2010