Professional Documents
Culture Documents
ndice
1 Descripcin
2 Definicin formal
2.1 Definicin de la altura de un rbol
2.2 Definicin de rbol AVL
3 Factor de equilibrio
4 Operaciones
4.1 Rotaciones
4.2 Insercin
4.3 Extraccin
4.4 Bsqueda
5 Vase tambin
6 Enlaces externos
Descripcin
El rbol AVL toma su nombre de las iniciales de los
apellidos de sus inventores, Georgii Adelson-Velskii y
Yevgeniy Landis. Lo dieron a conocer en la publicacin de
un artculo en 1962, An algorithm for the organization of
information (Un algoritmo para la organizacin de la
informacin).
Los rboles AVL estn siempre equilibrados de tal modo
que para todos los nodos, la altura de la rama izquierda no
difiere en ms de una unidad de la altura de la rama derecha
o viceversa. Gracias a esta forma de equilibrio (o balanceo),
la complejidad de una bsqueda 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
subrboles.
Definicin formal
sus
es AVL
es AVL
Factor de equilibrio
Cada nodo, adems de la informacin que se pretende almacenar, debe tener los dos punteros a los
rboles derecho e izquierdo, igual que los rboles binarios de bsqueda (ABB), y adems el dato que
controla el factor de equilibrio.
El factor de equilibrio es la diferencia entre las alturas del rbol derecho y el izquierdo:
FE = altura subrbol derecho - altura subrbol izquierdo;
Por definicin, para un rbol AVL, este valor debe ser -1, 0 1.
Si el factor de equilibrio de un nodo es:
0 -> el nodo est equilibrado y sus subrboles tienen exactamente la misma altura.
1 -> el nodo est equilibrado y su subrbol derecho es un nivel ms alto.
-1 -> el nodo est equilibrado y su subrbol izquierdo es un nivel ms alto.
Si el factor de equilibrio
es necesario reequilibrar.
Operaciones
Las operaciones bsicas de un rbol AVL implican generalmente el realizar los mismos algoritmos que
seran realizados en un rbol binario de bsqueda desequilibrado, pero precedido o seguido por una o
ms de las llamadas "rotaciones AVL".
Rotaciones
El reequilibrado se produce de abajo hacia arriba sobre los nodos en los que se produce el desequilibrio.
Pueden darse dos casos: rotacin simple o rotacin doble; a su vez ambos casos pueden ser hacia la
derecha o hacia la izquierda.
Rotacin simple a la derecha
De un rbol de raz (r) y de hijos izquierdo (i) y derecho (d), lo que haremos ser formar un nuevo rbol
cuya raz sea la raz del hijo izquierdo, como hijo izquierdo colocamos el hijo izquierdo de i (nuestro i)
y como hijo derecho construimos un nuevo rbol que tendr como raz, la raz del rbol (r), el hijo
derecho de i (d) ser el hijo izquierdo y el hijo derecho ser el hijo derecho del rbol (d).
Rotacin a la izquierda
De un rbol de raz (r) y de hijos izquierdo (i) y derecho (d), consiste en formar un nuevo rbol cuya raz
sea la raz del hijo derecho, como hijo derecho colocamos el hijo derecho de d (nuestro d) y como hijo
izquierdo construimos un nuevo rbol que tendr como raz la raz del rbol (r), el hijo izquierdo de d
ser el hijo derecho (i) y el hijo izquierdo ser el hijo izquierdo del rbol (i).
Precondicin : Tiene que tener hijo derecho no vaco.
Si la insercin se produce en el hijo derecho del hijo izquierdo del nodo desequilibrado (o viceversa) hay
que realizar una doble rotacin.
Rotacin doble a la derecha
La Rotacin doble a la Derecha son dos rotaciones simples, primero rotacin simple izquierda y luego
rotacin simple derecha.
Insercin
La insercin en un rbol de AVL puede ser realizada insertando el valor dado en el rbol como si fuera
un rbol de bsqueda binario desequilibrado y despus retrocediendo hacia la raz, rotando sobre
cualquier nodo que pueda haberse desequilibrado durante la insercin.
Proceso de insercin:
1.buscar hasta encontrar la posicin de insercin o modificacin (proceso idntico a insercin en
rbol binario de bsqueda)
2.insertar el nuevo nodo con factor de equilibrio equilibrado
3.desandar el camino de bsqueda, verificando el equilibrio de los nodos, y re-equilibrando si es
necesario
Debido a que las rotaciones son una operacin que tienen complejidad constante y a que la altura est
limitada a O (log(n)), el tiempo de ejecucin para la insercin es del orden O (log(n)).
Extraccin
El procedimiento de borrado es el mismo que en el caso de rbol binario de bsqueda.La diferencia se
encuentra en el proceso de reequilibrado posterior. El problema de la extraccin puede resolverse en O
(log n) pasos. Una extraccin trae consigo una disminucin de la altura de la rama donde se extrajo y
tendr como efecto un cambio en el factor de equilibrio del nodo padre de la rama en cuestin, pudiendo
necesitarse una rotacin.
Esta disminucin de la altura y la correccin de los factores de equilibrio con sus posibles rotaciones
asociadas pueden propagarse hasta la raz.
la izquierda.
En borrado pueden ser necesarias varias operaciones de restauracin del equilibrio, y hay que seguir
comprobando hasta llegar a la raz.
Bsqueda
Ejemplo en Java
" +numMat);
if(raz==null){
raz = new Nodo(nuevoM);
}
else{
insertar(raz,nuevoM);
}
}
private void insertar(Nodo rz, int nm){
if (rz == null)
rz = new Nodo(nm);
else if(nm < rz.numMat)
insertar(rz.izqda,nm);
else if(nm > rz.numMat)
insertar(rz.drcha,nm);
else
System.out.println("Numero Duplicados");
}
public void visualizar(){
if(raz!=null)
raz.re_enorden();
}
}
public class Ejecutar {
public static void main(String []args){
ABB rbol = new ABB();
rbol.insertar(6);
rbol.insertar(3);
rbol.insertar(7);
rbol.visualizar();
}
}
#include <stdio.h>
typedef struct AVL{
int dato, FB; // FB es la altura del subarbol izquierdo menos la altura del subarbol derecho
AVL *izq, *der;
bool borrado;
} AVL;
void rotarLL(AVL* &A){ //precond: el rbol necesita una rotacion LL
AVL* aux = A->izq->der;
A->izq->der = A;
A->izq->FB = 0;
AVL* aux2 = A->izq;
A->izq = aux;
A->FB = 0;
A = aux2;
}
void rotarRR(AVL* &A){ //precond: el rbol necesita una rotacion RR
AVL* aux = A->der->izq;
A->der->izq = A;
A->der->FB = 0;
AVL* aux2 = A->der;
A->der = aux;
A->FB = 0;
A = aux2;
}
void rotarLRalter(AVL* &A){ //precond: el rbol necesita una rotacion LR
rotarRR(A->izq);
rotarLL(A);
}
void rotarRLalter(AVL* &A){ //precond: el rbol necesita una rotacion RL
rotarLL(A->der);
rotarRR(A);
}
AVL* Crear(){
return NULL;
}
void Insert(int n, bool &aumento, AVL* &A){
if (A == NULL){
A = new AVL;
A->dato = n;
A->FB = 0;
A->izq = NULL;
A->der = NULL;
aumento = true;
A->borrado = false;
}else{
if (n < A->dato){
Insert(n, aumento, A->izq);
if (aumento){
switch (A->FB){
case -1:{
A->FB = 0;
aumento = false;
break;
}
case 0:{
}
case 1:{
if (A->izq->FB == 1){ // Si es 1 necesita una rotacion LL si es -1 necesita una rotac
rotarLL(A);
}else{
rotarLRalter(A);
}
aumento = false;
break;
}
}
}
}else{
return true;
}
}else if (n < A->dato){
return Pertenece(A->izq, n);
}else{
return Pertenece(A->der, n);
}
}
}
void Borrar(AVL* &A, int n){
if (A->dato == n){
A->borrado = true;
}else if (n < A->dato){
Borrar(A->izq, n);
}else{
Borrar(A->der, n);
}
}
Vase tambin
rbol binario de bsqueda
rbol (programacin)
rbol AA
rbol rojo-negro
rbol splay
rbol multirrama
Enlaces externos
Ms
informacin
sobre
rboles
AVL
(http://miarroba.com/foros/ver.php?
foroid=674005&temaid=3075255)
Applet que muestra el comportamiento de diferentes estructuras de datos arbreas
(http://webpages.ull.es/users/jriera/Docencia/AVL/AVL%20tree%20applet.htm)
Obtenido de http://es.wikipedia.org/w/index.php?title=rbol_AVL&oldid=76066630
Categora: rboles (estructura)
Esta pgina fue modificada por ltima vez el 4 ago 2014 a las 18:17.
El texto est disponible bajo la Licencia Creative Commons Atribucin Compartir Igual 3.0;
podran ser aplicables clusulas adicionales. Lanse los trminos de uso para ms informacin.
Wikipedia es una marca registrada de la Fundacin Wikimedia, Inc., una organizacin sin nimo
de lucro.