Download 3.2. Árboles AVL

Document related concepts

Árbol AVL wikipedia , lookup

Árbol binario de búsqueda wikipedia , lookup

Treap wikipedia , lookup

Rotación de árboles wikipedia , lookup

Árbol biselado wikipedia , lookup

Transcript
 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-2
h-1
h-1
I
I
D
item
D
item
3
 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
D
B
h+2
h
ROTACIÓN II
(-2,-1)
E
h
A
A
item
C
C
E
item
4
 DLSI (Univ. Alicante)
Tema 3. Tipo árbol
3.2. Árboles AVL
OPERACIONES BÁSICAS. INSERCIÓN (III)
FE = 0
D
FE = +2
B
+1
B
D
h+2
ROTACIÓN DD
(+2,+1)
h
A
E
h
item
E
C
A
C
item
F
B
FE = 0
F
B
h+2
ROTACIÓN ID
(-2,+1)
D
FE = -2
+1
h
D
G
h
h-1
A
C
C
A
E
E
G
item ó item
item ó item
B
FE = +2
F
ROTACIÓN DI
(+2,-1)
D
FE = 0
-1
F
B
h+2
D
h
A
h
C
h-1
C
item
A
G
E
item
E
G
ó item
ó item
 DLSI (Univ. Alicante)
5
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
8
8
-1
B
0
0
4
insertar 5
10
0
6
5
6
insertar 12
4
0
2
8
0
5
A
D
0
10
G
0
0
10 D
4
DD
+1
12
0
C
B
0
F
5
C
0
6
0
D
8
0
2
0
+1
4
ID
0
10
6
0
G
+1
+2
0
B
10
-1
+1
2
A
6
0
+1
4
0
0
2
D
-2
2
0
75
0
0
8
12
B
E
E
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
ENTRADA/SALIDA
A: AVL; c : Item
VAR I : Iterador ; Crece : Integer ;
METODO
I = Primer ( A ) ;
InsertarAux ( I, c, Crece ) ;
fMETODO
ALGORITMO INSERTARAUX
ENTRADA/SALIDA I : Iterador; Crece: Integer; c : Item ;
VAR CreceIz, CreceDe : Integer ; B : Arbol ;
METODO
si EsVacioArbIt ( I ) entonces
B = Enraizar ( c ) ; Mover ( I, B ) ; Crece = TRUE ;
sino
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
fMETODO
 DLSI (Univ. Alicante)
7
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;
fMETODO
8
 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
9
 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:
4
6
2
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
I
ó
h-1
h-1
h-2
I
D
I
D
h-2
D
Borrar el ítem nos llevará en el
árbol a un FE = ±1, en este caso
tampoco será necesario reequilibrar
FE = 0
h
I
FE = 0
ó
h-1
h-1
D
I
D
FE = -1
FE = +1
ó
h-2
I
D
I
 DLSI (Univ. Alicante)
h-2
D
11
Tema 3. Tipo árbol
3.2. Árboles AVL
OPERACIONES BÁSICAS. BORRADO (II)
Rotaciones simples
ROTACIÓN DD
(+2,0)
D
FE = -1
D
FE = +1
B
0
B
h+2
h
h
A
E
h
h-1
E
C
C
FE = +1
B
(+2,+1)
La altura del árbol decrece
A
D
FE = 0
D
+1
B
h+2
h
h
A
E
h-1
C
h-1
E
A
C
12
 DLSI (Univ. Alicante)
Tema 3. Tipo árbol
3.2. Árboles AVL
OPERACIONES BÁSICAS. BORRADO (III)
Rotaciones simples
FE = -1
D
ROTACIÓN II
(-2,0)
FE = +1
B
0
D
B
h h+2
E
h
A
h-1
h
E
A
C
C
FE = -1
D
B
FE = 0
-1
B
(-2,-1)
La altura del árbol decrece
D
h
E
h+2
h
h-1
h-1
A
C
E
C
A
13
 DLSI (Univ. Alicante)
Tema 3. Tipo árbol
3.2. Árboles AVL
OPERACIONES BÁSICAS. BORRADO (IV)
Rotaciones dobles
B
ROTACIÓN DI
(+2,-1)
La altura del árbol decrece
FE = +1
D
FE = 0
-1
F
F
B
h+2
D
h+1
A
h
h-1
C
E
G
E
C
A
G
item ó item
item ó item
F
ROTACIÓN ID
(-2,+1)
La altura del árbol decrece
D
FE = -1
FE = 0
+1
B
F
B
h+1
h+2
D
h
A
G
C
item
h-1
E
A
C
E
h
G
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)
5
8
3
2
1
7
4
6
10
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
50
30
20
10
25
45
35
55
42
32
5
17
 DLSI (Univ. Alicante)
Tema 3. Tipo árbol
3.2. Árboles AVL
EJERCICIOS borrado: SOLUCIÓN
2) La solución es la siguiente:
25
45
10
5
20
35
50
42
18