Está en la página 1de 9

 DLSI (Univ. Alicante) Tema 3.

Tipo árbol

3.2. Árboles AVL


DEFINICIONES (I)

La eficiencia en la búsqueda de un elemento en un árbol binario de búsqueda se


mide en términos de:
Número de comparaciones
La altura del árbol
Árbol completamente equilibrado: los elementos del árbol deben estar repartidos
en igual número entre el subárbol izquierdo y el derecho, de tal forma que la
diferencia en número de nodos entre ambos subárboles sea como mucho 1
Problema: el mantenimiento del árbol
Árboles AVL: desarrollado por Adelson-Velskii y Landis (1962). Los AVL son
árboles balanceados (equilibrados) con respecto a la altura de los subárboles:
“Un árbol está equilibrado respecto a la altura si y solo si para cada uno de sus
nodos ocurre que las alturas de los dos subárboles difieren como mucho en 1”
Consecuencia 1. Un árbol vacío está equilibrado con respecto a la altura
Consecuencia 2. El árbol equilibrado óptimo será aquél que cumple:
n = 2h - 1, donde n = nº nodos y h = altura
1

 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


DEFINICIONES (II)

Si T es un árbol binario no vacío con TL y TR como subárboles


izquierdo y derecho respectivamente, entonces T está balanceado
con respecto a la altura si y solo si
TL y TR son balanceados respecto a la altura, y
| hl - hr | ≤ 1 donde hl y hr son las alturas respectivas de TL y TR
El factor de equilibrio FE ( T ) de un nodo T en un árbol binario
se define como hr - hl. Para cualquier nodo T en un árbol AVL, se
cumple FE ( T ) = -1, 0, 1

2
 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


OPERACIONES BÁSICAS. INSERCIÓN (I)

Representación de árboles AVL


Mantener la información sobre el equilibrio de forma implícita en la estructura del
árbol
Atribuir a, y almacenar con, cada nodo el factor de equilibrio de forma explícita
TNodoArb {
Titem fitem;
TArbBin fiz, fde;
int FE; }
Inserción en árboles AVL. Casos:
Después de la inserción del ítem, los subárboles I y D igualarán sus alturas

FE = 0 FE = 0

h
ó
h-2 h-1 h-1 h-2
I D
D I
item item

 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


OPERACIONES BÁSICAS. INSERCIÓN (II)

Después de la inserción, I y D tendrán distinta altura, pero sin vulnerar la


condición de equilibrio

FE = -1 FE = +1

h
ó
h-1 h-1

I D I D

item item

Si hI > hD y se realiza inserción en I, ó hI < hD y se realiza inserción en D


Formas de rotación: II, ID, DI, DD

D FE = -2
B FE = 0
-1

B D
h+2
h
ROTACIÓN II E
A
(-2,-1) h
item
A C C E

item

4
 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


OPERACIONES BÁSICAS. INSERCIÓN (III)
B FE = +2 D FE = 0

+1
D B
h+2
ROTACIÓN DD h
A E
(+2,+1) h
item
C E A C
item

F FE = -2 D FE = 0

+1
B B F
h+2 h
ROTACIÓN ID D
G
(-2,+1) h
C E
h-1 A G
A
C E item ó item

item ó item

B FE = +2 D FE = 0

F -1
B F
ROTACIÓN DI h+2
D
(+2,-1) h
A h
h-1 C E G
C E G A
item ó item
5
item ó item

 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


OPERACIONES BÁSICAS. INSERCIÓN. EJEMPLO (IV)

Ejemplo. Insertar en el siguiente árbol los elementos 5 y 12


F
D
8 -1 8 -2 6 0

0 B +1 0 +1
0 B 0
4 insertar 5 4 10 4 F
10 8
ID
-1 G
0 0 +1 0 0
0 0
2 2 A 2
6 A 6 D 5 10
G
C
0
5
C
6 +1 6 0
0 0
0 +2
insertar 12 4 B 4 10 D
8 DD

0 +1 0 0 0 0
0
D 2 75
2 5 10 8 12
B E
0
E
12

Hay que tener en cuenta que la actualización del FE de cada nodo se efectúa
desde las hojas hacia la raíz del árbol
6
 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


OPERACIONES BÁSICAS. INSERCIÓN. IMPLEMENTACIÓN (V)

ALGORITMO INSERTAR ALGORITMO INSERTARAUX


ENTRADA/SALIDA ENTRADA/SALIDA I : Iterador; Crece: Integer; c : Item ;
A: AVL; c : Item VAR CreceIz, CreceDe : Integer ; B : Arbol ;
VAR I : Iterador ; Crece : Integer ; METODO
METODO si EsVacioArbIt ( I ) entonces
I = Primer ( A ) ; B = Enraizar ( c ) ; Mover ( I, B ) ; Crece = TRUE ;
InsertarAux ( I, c, Crece ) ; sino
fMETODO Crece = CreceIz = CreceDe = FALSE ;
si ( c < Obtener ( I ) ) entonces
INSERTARAUX ( HijoIzq ( I ), c, CreceIz ) ;
Crece = CreceIz ;
sino
si ( c > Obtener ( I ) ) entonces
INSERTARAUX ( HijoDer ( I ), c, CreceDe ) ;
Crece = CreceDe ;
fsi
fsi
si Crece entonces
caso de:
1) ( CreceIz y FE ( I ) = 1 ) ó ( CreceDe y FE ( I ) = -1 ) :
Crece = FALSE ; FE ( I ) = 0 ;
2) CreceIz y FE ( I ) = 0 : FE ( I ) = -1 ;
3) CreceDe y FE ( I ) = 0 : FE ( I ) = 1 ;
4) CreceIz y FE ( I ) = -1 : EquilibrarIzquierda ( I, Crece ) ;
5 ) CreceDe y FE ( I ) = 1 : EquilibrarDerecha ( I, Crece ) ;
fcaso
fsi
fsi
7
fMETODO

 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


OPERACIONES BÁSICAS. INSERCIÓN. IMPLEMENTACIÓN (VI)

ALGORITMO EQUILIBRARIZQUIERDA
ENTRADA/SALIDA I : Iterador; Crece: Integer;
VAR J, K: Iterador; int E2;
METODO
si ( FE (HijoIzq (I ) = -1 entonces //ROTACIÓN II
Mover (J, HijoIzq (I));
Mover (HijoIzq (I), HijoDer (J));
Mover (HijoDer (J), I);
FE (J) = 0; FE (HijoDer (J)) = 0;
Mover (I,J);
sino //ROTACIÓN ID
Mover (J, HijoIzq (I));
Mover (K, HijoDer (J));
E2 = FE (K);
Mover (HijoIzq (I), HijoDer (K));
Mover (HijoDer (J), HijoIzq (K));
Mover (HijoIzq (K), J);
Mover (HijoDer (K), I);
FE (K) = 0;

caso de E2
-1: FE (HijoIzq (K)) = 0; FE (HijoDer (K)) = 1;
+1: FE (HijoIzq (K)) = -1; FE (HijoDer (K)) = 0;
0: FE (HijoIzq (K)) = 0; FE (HijoDer (K)) = 0;
fcaso
Mover (I, K);
fsi
Crece = FALSE;
8
fMETODO
 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


EJERCICIOS inserción

1) Construir un árbol AVL formado por los nodos insertados en el siguiente orden
con etiquetas 4, 5, 7, 2, 1, 3, 6

2) Insertar las mismas etiquetas con el siguiente orden: 1, 2, 3, 4, 5, 6, 7

 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


EJERCICIOS inserción: SOLUCIÓN

1) La solución para los 2 ejercicios es la siguiente:

2 6

1 3 5 7

10
 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


OPERACIONES BÁSICAS. BORRADO (I)

Borrado en árboles AVL. Casos:


Borrar el ítem nos llevará en el árbol a un FE = 0, no será necesario
reequilibrar

FE = +1 FE = -1 FE = 0

h
h-2 h-1 ó h-1 h-2 h-2
I I I
D D D

Borrar el ítem nos llevará en el FE = 0 FE = 0


árbol a un FE = ±1, en este caso
tampoco será necesario reequilibrar h
h-1 ó h-1
I D I D

FE = -1
FE = +1

ó
h-2
h-2
I D I
D
11

 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


OPERACIONES BÁSICAS. BORRADO (II)

Rotaciones simples

ROTACIÓN DD B FE = +1 D FE = -1

(+2,0) D
0
B
h+2
h h
A E
h h-1
C E A C

B FE = +1 D FE = 0

+1
(+2,+1) D B
h+2
La altura del árbol decrece h h
A E
h-1 h-1
C A C
E

12
 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


OPERACIONES BÁSICAS. BORRADO (III)

Rotaciones simples

D FE = -1 B FE = +1
ROTACIÓN II
0
(-2,0) B D
h h+2
E h
A
h h-1
E
A C C

D FE = -1 B FE = 0

-1
B D
(-2,-1) h
h+2
E h
La altura del árbol decrece
h-1 h-1
C A E
C
A

13

 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


OPERACIONES BÁSICAS. BORRADO (IV)

Rotaciones dobles

B FE = +1 D FE = 0

ROTACIÓN DI -1
F F
(+2,-1) B
h+2
La altura del árbol decrece D
h+1
A h C E
h-1 A G
C E G
item ó item

item ó item

F FE = -1 D FE = 0

+1
ROTACIÓN ID
B B F
(-2,+1) h+2 h+1

La altura del árbol decrece D

h G h
h-1 C E
A A G
C E item ó item
item ó item
14
 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


OPERACIONES BÁSICAS. INSERCIÓN Y BORRADO

Estudio de las complejidades de ambos algoritmos


El análisis matemático del algoritmo de inserción es un problema todavía no
resuelto. Los ensayos empíricos apoyan la conjetura de que la altura esperada
para el árbol AVL de n nodos es
h = log2 ( n ) + c / c es una constante pequeña
Estos árboles deben utilizarse sólo si las recuperaciones de información
(búsquedas) son considerablemente más frecuentes que las inserciones Æ
debido a la complejidad de las operac. de equilibrado
Se puede borrar un elemento en un árbol equilibrado con log ( n ) operaciones
( en el caso más desfavorable )
Diferencias operacionales de borrado e inserción:
Al realizar una inserción de una sola clave se puede producir como máximo una
rotación ( de dos o tres nodos )
El borrado puede requerir una rotac. en todos los nodos del camino de búsqueda
Los análisis empíricos dan como resultado que, mientras se presenta una
rotación por cada dos inserciones,
sólo se necesita una por cada cinco borrados. El borrado en árboles equilibrados
es, pues, tan sencillo ( o tan complicado ) como la inserción 15

 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


EJERCICIOS borrado

1) Dado el siguiente árbol AVL de entrada, efectuar los siguientes borrados en el


mismo: 4, 8, 6, 5, 2, 1, 7. (Nota: al borrar un nodo con 2 hijos, sustituir por el
mayor de la izquierda)

3 8

2 4 7 10

1 6 9 11

16
 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


EJERCICIOS borrado

2) Dado el siguiente árbol AVL de entrada, efectuar los siguientes borrados en el


mismo: 55, 32, 40, 30. (Nota: al borrar un nodo con 2 hijos, sustituir por el
mayor de la izquierda)

40

30 50

20 35 45 55

10 25 32 42

17

 DLSI (Univ. Alicante) Tema 3. Tipo árbol

3.2. Árboles AVL


EJERCICIOS borrado: SOLUCIÓN

2) La solución es la siguiente:

25

10 45

5 20 35 50

42

18

También podría gustarte