Anda di halaman 1dari 9

Historia:

El nombre AVL son las iniciales de los hombres que idearon este tipo de árbol
Adelson-Velskii y Landis en 1962.

Básicamente un árbol AVL es un Árbol binario de búsqueda al que se le añade


una condición de equilibrio. Esta condición es que para todo nodo la altura de
sus subárboles izquierdo y derecho pueden diferir a la suma en 1.

Georgi Adelson - Velskii

(8 de enero de 1922)

 Nació el 8 de enero de 1922, es un científico de la


computación y matemático ruso.
 Junto con Landis idearon en 1962 el árbol AVL, primer árbol binario
autoajustable.
 En 1965 dirigió el desarrollo de un programa de ajedrez en el Instituto
de Física Teórica y Experimental de Moscú. Actualmente reside
en Ashdod, Israel.
Yevgeni Mijáilovich Landis

(6 de octubre, 1921 - 12 de diciembre, 1997)

 Fue un matemático soviético nacido en Járkov, Ucrania.


 Es conocido en el mundo de la computación por idear junto a Georgi
Adelsón-Velski el primer árbol binario de búsqueda auto-balanceable, el
árbol AVL.
 Solicitó su acceso al Departamento de Matemáticas y Mecánica de la
Universidad Estatal de Moscú, donde fue admitido en 1939
Descripción
Los árboles AVL están siempre equilibrados de tal modo que, para todos los
nodos, la altura de la rama izquierda no difiere en más de una unidad de la altura
de la rama derecha o viceversa. Gracias a esta forma de equilibrio (o balanceo),
la complejidad de una búsqueda en uno de estos árboles se mantiene siempre en
orden de complejidad O (log n). El factor de equilibrio puede ser almacenado
directamente en cada nodo o ser computado a partir de las alturas de los
subárboles.

Para conseguir esta propiedad de equilibrio, la inserción y el borrado de los nodos


se ha de realizar de una forma especial. Si al realizar una operación de inserción
o borrado se rompe la condición de equilibrio, hay que realizar una serie de
rotaciones de los nodos.
Operaciones en Arboles AVL
Las mismas operaciones de árboles ABB

 Insertar
 Eliminar
 Buscar

Al momento de insertar o eliminar, se comprueba si el árbol esta desequilibrado,


en caso de estarlo se realiza el balanceo.

Ejemplo de Árbol Degenerado y Balanceado


¿Pero cómo se pasa de Degenerado a Balanceado?

Factor de Equilibrio

Rotaciones
Es el único método que se utiliza para balancear un árbol AVL.

Este se desglosa en 4 variaciones, los cuales que pueden ser:

 Rotaciones simples a la derecha. (RSD)


 Rotación simple a la izquierda. (RSI)
 Rotación doble a la derecha. (RDD)
 Rotación doble a la izquierda. (RDI)
¿Cuándo aplicar rotaciones?

Aplicación de Rotaciones (Según Caso)


• Rotación Simple a la derecha: Se efectúa cuando el nodo está demasiado
cargado a la izquierda y su nodo izquierdo no está cargado a la Derecha.

• Rotación Simple a la izquierda: Se efectúa cuando el nodo está


demasiado cargado a la derecha y su nodo derecho no está cargado a la
Izquierda.

• Rotación doble a la derecha: Se efectúa cuando el nodo está demasiado


cargado a la izquierda y su nodo izquierdo está cargado a la derecha.
(RSI, RSD)

• Rotación doble a la izquierda: Se efectúa cuando el nodo está demasiado


cargado a la derecha y su nodo derecho está cargado a la izquierda.
(RSD, RSI)

Altura del Nodo

Factor de Equilibrio
Búsqueda

Es una de las operaciones más importantes de esta estructura. Debido a la


propiedad de los árboles binarios de búsqueda, si el valor buscado no es igual al
de nodo actual, sólo existen dos posibilidades: que sea mayor o que sea menor.

Lo que implica que el nodo buscado puede pertenecer a uno de los dos
subárboles. Cada vez que se toma la decisión de buscar en uno de los
subárboles de un nodo, se están descartando los nodos del otro subárbol.

En caso de árboles balanceados, se descarta la mitad de los elementos de la


estructura, esto cumple el modelo: T(n) = T(n/2) +c, lo cual asegura costo
logarítmico. pnodo BuscarIterativo( pnodo t, int valor)

while ( t != NULL)

if ( t->clave == valor ) return (t);

else {

if (t->clave < valor ) t = t->right; //desciende por la derecha

else t = t->left; //desciende por la izquierda

return (t); /* NULL No lo encontró*/

Es preciso tener implementados los operadores de igualdad y menor que, en


caso de que éstos no existan en el lenguaje, para el tipo de datos de la clave.
Por ejemplo, si la clave es alfanumérica (un string), una estructura, etc.