Sunteți pe pagina 1din 7

Arboles Balanceados AVL 1

ARBOLES BALANCEADOS AVL

Definición: Un ABB es de tipo equilibrado o balanceado (AVL) si, para cada uno de sus
nodos ocurre que las alturas de sus dos subárboles izquierdo y derecho difieren como mucho
en 1. Los árboles que cumplen esta condición son denominados a menudo árboles AVL.

Altura del subárbol izquierdo – Altura del subárbol derecho  ≤ 1

Las siglas AVL provienen de las iniciales de Addelson- Velskii y Landis que son los nombres
de sus creadores.

En la figura se muestra un árbol que no es AVL al no cumplirse la condición


fundamental de diferencia de altura menor o igual a 1 en el nodo con id o clave k.

En el ABB la operación de búsqueda, inserción o eliminación puede llegar a ser de O(n)


donde n es la altura del árbol. El peor caso ocurre para un árbol degenerado, esto es, que
solo tenga un subárbol izquierdo o uno derecho (1 nodo por cada nivel). En este caso se
comporta como una lista lineal y las operaciones tendrán una complejidad de O(n).

En el mejor caso el ABB es de altura mínima, es decir que en todos sus n – 1 primeros
niveles están los nodos casi completos y solo varían en las hojas. En este caso el número de
nodos está dado por n = 2h+1 - 1, con h = altura del árbol y esto implica que la complejidad
en tiempo de ejecución se reduce a O(log 2 n).

Todo árbol AVL es un ABB equilibrado, esto implica que a través de los árboles AVL
realizaremos un procedimiento de búsqueda análogo al de los ABB, pero con la ventaja de
que garantizaremos un caso peor de O(log2 n) y el mantenimiento del equilibrio en todos y
cada uno de sus elementos.

Para las operaciones de inserción y eliminación también tomaremos como base las del
ABB. El único problema que tendrán es el mantener siempre tras cada inserción o
eliminación la condición de equilibrio, pero esto puede hacerse muy fácilmente sin más que
hacer algunos reajustes locales (rotaciones), cambiando apuntadores. La complejidad de
estas operaciones aplicando el mismo razonamiento que la búsqueda nunca excederá de
O(Log2 n).

Estudiaremos particularmente la operación de inserción en un árbol AVL, considerando los


diferentes casos que se presentan y las acciones que se construyen para mantener este
árbol siempre como AVL.

Prof. Ana Miriam Mesa


Arboles Balanceados AVL 2

Inserción en un árbol AVL

Sea B = (r, {Ir, Dr}) un árbol AVL y hIr y hDr las alturas de sus ramas Ir y Dr
respectivamente. Supongamos que se insertará un nodo en Ir el cual cambia o afecta su
altura (hIr). Pueden darse tres casos:

Antes de la Después de la Condición de Balance


Inserción Inserción
(1) hIr = hDr hIr > hDr Se mantiene
(2) hIr < hDr hIr = hDr Se mantiene
(3) hIr > hDr hIr >> hDr Se pierde (debe balancearse)

De alguna manera debemos guardar en cada nodo la información de su situación de


balance, esto es, un campo adicional que llamaremos Bal que contiene la diferencia entre la
altura del subárbol derecho menos la altura del subárbol izquierdo

Bal = (hDr – hIr).

Los tres valores posibles que tomará este campo serán los siguientes:

Valor del Relación de Altura Significado


campo Bal
-1 hIr > hDr ó hDr = hIr - 1 La altura del subárbol derecho es menor
que la del subárbol izquierdo (uno menos)
0 hIr = hDr Los subárboles izquierdo y derecho tienen
la misma altura
+1 (ó 1) hIr < hDr ó hDr = hIr + 1 La altura del subárbol derecho es mayor
que la del subárbol izquierdo (uno mas)

Así, la implementación de un árbol AVL sólo es una extensión de un ABB solo se agrega
un atributo Bal a la clase Nodo y se declara así:

Clase Nodo
Atributos
Elem Id; #campo id o clave del nodo
? Nodo Izq;
? Nodo Der;
Subrango Entero Bal = [- 1…1]; #atributo indicativo del balance del nodo
fClase Nodo

Clase AVL [Elem]


Atributos
Privado
Tipo ? Nodo Nod;
Nod A; #referencia al nodo raíz del ABB
Operaciones
#las del ABB, solo cambia la implementación para que se conserve como AVL
#y se incluyen las acciones de rotación correspondientes
fClase AVL

Las operaciones de consulta del árbol AVL (pertenece y localizar) son idénticas a las del
ABB, pues no afectan el balance o equilibrio del árbol AVL. En cambio las operaciones de
inserción y eliminación sí lo afectan, de manera que deben utilizar este campo para validar

Prof. Ana Miriam Mesa


Arboles Balanceados AVL 3

el balance y realizar las modificaciones necesarias (rotaciones de nodos) para que el árbol se
mantenga equilibrado.

El algoritmo de inserción en un árbol AVL realiza los siguientes pasos:

1. Busca en el árbol el lugar donde se insertará el nuevo nodo (una hoja tal como en un
ABB). Esto implica recorrer un camino desde la raíz hasta el lugar de inserción. Este paso
consume un tiempo de O(Log2 n) dado que la altura de un árbol AVL es de O(Log 2 n).

2. Se regresa por el mismo camino recorrido en el paso 1 y se ajustan los factores de


balance. Si se insertó en el subárbol izquierdo se debe restar uno al valor del campo Bal
en cada nodo. Si se insertó por el subárbol derecho se debe sumar uno al valor del
campo Bal. En cada paso de este regreso se debe pasar información acerca de la
variación de la altura del árbol en caso de que se incremente. Esto lleva a añadir una
variable de tipo lógico que será pasada como parámetro por referencia. Este paso
consume un tiempo de ejecución de O(Log 2 n).

3. Si existe algún desequilibrio (el campo balance de algún nodo tome el valor - 2 o +2) se
debe reorganizar el subárbol que tiene como raíz dicho nodo (el que ocasiona el
desequilibrio que será llamado nodo pivote). La operación de rebalanceo se efectúa
mediante una secuencia de reasignación de apuntadores que determinan una rotación
simple o doble de dos o tres nodos, además de la actualización de los factores de
balance en cada nodo. Este paso es de O(1).

Valor del campo Nuevo Valor Nuevo Valor


P?.Bal (Inserción Izda) (Inserción Der)
(antes de Insertar)
(1) +1 0 +2 √
(2) 0 -1 +1
(3) -1 -2 √ 0

√: Rebalancear el subárbol partiendo del nodo que ocasiona el desequilibrio mediante


una rotación simple o doble.

Rotaciones
La operación de rotación se utiliza para restablecer el equilibrio de un AVL, cuando se
pierde debido a una operación de inserción o eliminación.

Operaciones de balanceo:

Antes de ver las operaciones definiremos 3 variables:

P = apuntador del nodo con factor de balance no permitido. ( 2 ó - 2 ).


H = apuntador al hijo izquierdo o derecho de P. Se ubica de acuerdo a estas reglas:

• Si P? .Bal = +2 entonces H es el hijo derecho de P.


• Si P? .Bal = - 2 entonces H es el hijo izquierdo de P.

N = apuntador a un “nieto” de P (hijo izquierdo o derecho de H). Este nodo es afectado si se


realiza una rotación doble. Este apuntador se ubica de acuerdo a las siguientes reglas:

• Si H es el hijo izquierdo de P, N es el hijo derecho de H


• Si H es el hijo derecho de P, N es el hijo izquierdo de H.

Prof. Ana Miriam Mesa


Arboles Balanceados AVL 4

Existen cuatro tipos de rotaciones:

Nombre Fig. Condición Nro de nodos


afectados
Simple a la Izquierda 1 P? .Bal = - 2 2 nodos
H? .Bal = - 1 (hijo izquierdo)
Simple a la Derecha 4 P? .Bal = +2 3 nodos
H? .Bal = +1 (hijo derecho)
Doble a la Izquierda 2 P? .Bal = - 2 2 nodos
H? .Bal = +1 o 0 (hijo izquierdo)
Doble a la Derecha 3 P? .Bal = +2 3 nodos
H? .Bal = - 1 o 0 (hijo derecho)

1.- 2.-
A A

3.- 4.-
A A

En los casos 1 y 4 ocurre un desequilibrio al insertar un nodo por una rama “exterior”
izquierda o derecha del AVL y se necesita una rotación simple para restaurarlo. En los casos
2 y 3 ocurre desequilibrio al insertar u nodo por una rama “interior” a la izquierda o la
derecha, por lo que se requiere una rotación doble.

Diagrama General de una Rotación Simple

Prof. Ana Miriam Mesa


Arboles Balanceados AVL 5

Se muestra un ejemplo de rotación simple a la Izquierda, que involucra a dos nodos: NA y


su hijo izquierdo NB . El resultado es que NB “sube” como padre de NA , quien pasa a ser
ahora su hijo derecho. Y el hijo derecho de NB se convierte en el hijo izquierdo de NA .

NA NB

NB NA

Diagrama General de una Rotación Doble

En la figura se muestra un ejemplo de Rotación Doble a la Izquierda, que involucra a tres


nodos (NA , NB y Q) y se realiza como una composición de dos rotaciones simples:
1. Q y NB hacia la izquierda
2. Q y NA hacia la derecha

NA NA Q

NB NB NA
Q

Q NB

El nodo Q pasa a ser la raíz de NA y NB. El hijo izquierdo Q es NB y el derecho es NA y a su


vez, el hijo derecho de Q pasa a ser el izquierdo de NB y el hijo izquierdo de Q es ahora el
hijo derecho de NA

Prof. Ana Miriam Mesa


Arboles Balanceados AVL 6

Ejemplos Gráficos de Inserción con uso de Rotación en árboles AVL

1. Rotación Simple a la Izquierda

-1 -1 -1
8 P
8 P
8
-1 0 -2 0 0 0
4 9 H 4 9 3 9
0 -1 0 0

3 3 1 4
0

1
A.Insertar (A.Raiz(), 1). S produce Estado Final – Rotación Simple a
Estado Inicial desequilibrio en una rama izquierda la Izquierda
externa

2. Rotación Doble a la Izquierda


P
-1
8 -2
H 8
0 0
1 0
5 9
5 9
0 0
0 -1
3 7 N
3 7
0
Estado Inicial
6
A.Insertar (A.Raiz(), 6). El desequilibrio se produce en
una rama interna del subárbol izquierdo de P
P

-2
N 8
P
-2 0
H 7 9 0
7
0
0 +1
5 5 8
0
0 0 0 0
3 6 3 6 9
3.
Rotación de los nodos N y H hacia la izquierda. Falta
rotar N y P hacia la derecha Estado Final – Rotación Doble a la Izquierda

Prof. Ana Miriam Mesa


Arboles Balanceados AVL 7

Rotación Simple a la Derecha


P
P 0
+2
+1 7
6 6 H
0 0
0
+1 6 8
7 7
0

Estado Inicial A.Insertar (A.Raiz(), 8). Se produce Estado Final – Rotación Simple a la
desequilibrio en una rama derecha externa Derecha

4. Rotación Doble a la Derecha

+1
+1
4 4
P
0 +1 0 +2
H
2 5 2 5
0 -1

7 7
0

6 N
Estado Inicial
A.Insertar (A.Raiz(), 6). El desequilibrio se produce en
una rama interna del subárbol derecho de P

+2 +1
4 4
P
P
0 +2 0 0
N
2 5 2 6
+1 0
0
6 5 7
0
H
7

Rotación de los nodos N y H hacia la derecha. Falta Estado Final – Rotación Doble a la Derecha
rotar N y P hacia la izquierda

Prof. Ana Miriam Mesa

S-ar putea să vă placă și