You are on page 1of 54

25/08/2014 1

Unidad IV
Estructuras no lineales de Datos:
rboles AVL
Prof. Domingo Hernndez
25/08/2014 2
Contenido.
1.- Introduccin.

2.- rboles AVL.

3.- Caractersticas.

4.- Implantacin.

5.- Balaceo.

6.- Algoritmos.



25/08/2014 3
Estructuras no lineales:
rboles AVL
Introduccin

Un rbol binario de bsqueda es un rbol binario en el
cual cada nodo cumple con que todos los nodos de su
subrbol izquierdo son menores que la raz y todos los
nodos del subrbol derecho son mayores que la raz.


Recordamos tambin que el tiempo de las operaciones
sobre un rbol binario de bsqueda son O(log n)
promedio, pero el peor caso es O(n), donde n es el
nmero de elementos.
25/08/2014 4
Estructuras no lineales:
rboles AVL
Introduccin
La bsqueda de elementos en un rbol binario tiene
un costo O(log n) y O(n).
Depende de cmo fue el orden de insercin de los
elementos.







Los arboles equilibrados o balanceados surgen para
mejorar el rendimiento de las operaciones que
involucren una bsqueda.


25/08/2014 5
Estructuras no Lineales:
rboles AVL
Un ABB en el peor de los casos cualquier
operacin requiere O(n)
9
5 10
3
7
9
7
10
5
3
Introduccin
25/08/2014 6
Estructuras no Lineales:
rboles Equilibrados
Se desea construir rboles que garanticen un
equilibrio. Entre estas estructuras estn:

AVL con una garanta de tiempo de ejecucin
(log n).

Arboles Rojo y Negro. (log n).

Arboles biselados autoajustables (Splay).
Anlisis amortizado para un conjunto de m
operaciones puede ser completada en un
tiempo (m log n).
Introduccin
25/08/2014 7
Estructuras no Lineales:
rboles Equilibrados
Todos los arboles de bsqueda equilibrados son casos
especiales de los rboles binarios de bsqueda.

Tienen la estructura de un ABB.

Obedecen a la propiedad de los ABB. (poseen la
misma estrategia de bsqueda.)

Los rboles equilibrados slo utilizan restricciones
adicionales sobre los ABB.

Introduccin
25/08/2014 8
Estructuras no lineales:
rboles AVL
Introduccin

Un rbol AVL es un rbol binario de bsqueda que
cumple con la condicin de que la diferencia entre las
alturas de los subrboles de cada uno de sus nodos es,
como mucho 1.

La denominacin de rbol AVL viene dada por los
creadores de tal estructura
(Adelson-Velskii y Landis).

25/08/2014 9
Estructuras no lineales:
rboles Equilibrados AVL
Definicin Formal de rbol AVL

Sea T un rbol binario de bsqueda (ABB) con Ti y
Td siendo sus sub-rboles izquierdo y derecho
respectivamente, tenemos que:


* Si T es vaco, es un rbol AVL
* Si T es un ABB no vaco, es AVL si y slo si:

o Ti y Td son AVL y

o H(Td) H(Ti) = + 1, 0 1 (factor de equilibrio)
25/08/2014 10
Estructuras no lineales:
rboles Equilibrados AVL
Introduccin

Los rboles AVL, no se tratan de rboles
perfectamente equilibrados, pero s son lo
suficientemente equilibrados como para que su
comportamiento sea lo bastante bueno como para
usarlos donde los ABB no garantizan tiempos de
bsqueda ptimos.



El algoritmo para mantener un rbol AVL
equilibrado se basa en re-equilibrados locales, de
modo que no es necesario explorar todo el rbol
despus de cada insercin o borrado.

25/08/2014 11
Estructuras no lineales:
rboles Equilibrados AVL
Introduccin


Los AVL son tambin ABB, de modo que mantienen
todas las operaciones que poseen stos.


Las nuevas operaciones son las de equilibrar el
rbol, pero eso se hace como parte de las operaciones
de insertado y borrado.
25/08/2014 12
Estructuras no lineales:
rboles Equilibrados AVL
Caractersticas de los rboles AVL

*La diferencia entre las alturas de los subrboles
derecho e izquierdo no debe excederse en ms de 1.

*Cada nodo tiene asignado un peso de acuerdo a las
alturas de sus subrboles

*Un nodo tiene un peso de 1 si su subrbol derecho
es ms alto, -1 si su subrbol izquierdo es ms alto
y 0 si las alturas son las mismas.

*La insercin y eliminacin en AVLs es la misma que
en los ABBs slo que tenemos que adicionar el
proceso de balanceo.

25/08/2014 13
Estructuras no lineales:
rboles Equilibrados AVL
25/08/2014 14
Estructuras no lineales:
rboles Equilibrados 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;


25/08/2014 15
Estructuras no lineales:
rboles Equilibrados AVL
25/08/2014 16
Estructuras no lineales:
rboles Equilibrados AVL
template <class T> class NodoAVL:
privateNododArb<T> {
friend class arbolAVL<T>;
protected:
int h; // Factor de Equilibrio del nodo
public:
NodoAVL();
NodoAVL(const T& elem);
int H(){return h};
void H(int i);
}
Implantacin de la clase nodo para rboles AVL
25/08/2014 17
Estructuras no lineales:
rboles Equilibrados AVL
25/08/2014 18
Estructuras no lineales: Operaciones
sobre rboles Equilibrados AVL
25/08/2014 19
Estructuras no lineales: Operaciones
sobre rboles Equilibrados AVL
Rotaciones:
Una propiedad que comparten todas las estructuras de
datos de rboles de bsqueda equilibrados, es que con
el fin de satisfacer sus diferentes restricciones,
reorganizan sus subrboles utilizando rotaciones.
Cada uno de los patrones de rotacin se construyen
usando uno o ms de las operaciones bsicas de
rotaciones.
25/08/2014 20
Estructuras no lineales:
rboles Equilibrados AVL
Tc
Ta Tb
p
v
Ta
Tc Tb
v
p
Rotar derecha(p)
25/08/2014 21
Estructuras no lineales:
rboles Equilibrados AVL
25/08/2014 22
Estructuras no lineales:
rboles Equilibrados AVL
25/08/2014 23
Estructuras no lineales:
rboles Equilibrados AVL
Rotacin simple a la Derecha
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).
Precondicin : Tiene que tener hijo izquierdo no
vaco.

25/08/2014
Estructuras no lineales:
rboles Equilibrados AVL
Rotacin simple a la Derecha

NodoAVL<T>* RotaSimpleDer(NodoAVL<T>* p) {
Assert (p!=0);
Assert(pHizq()!=0);
NodoAVL<T> * q= pHizq();
pHizq(qHder());
qHder(p);
qH(0); // Actualiza FE
pH(0); // Actualiza FE
return q;
}

25/08/2014 25
Estructuras no lineales:
rboles Equilibrados AVL
Rotacin simple a la Izquierda
Tc
Ta Tb
p
v
Ta
Tc Tb
v
p
Rotar
izquierda(v)
25/08/2014
Estructuras no lineales:
rboles Equilibrados AVL
Rotacin simple a la Izquierda
25/08/2014
Estructuras no lineales:
rboles Equilibrados AVL
Rotacin simple a la Izquierda
25/08/2014 28
Estructuras no lineales:
rboles Equilibrados AVL
Rotacin simple a la Izquierda

Rotacin simple 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.

25/08/2014
Estructuras no lineales:
rboles Equilibrados AVL
Rotacin simple a la Izquierda

NodoAVL<T>* RotaSimpleIzq(NodoAVL<T>* p) {
Assert (p!=0);
Assert(pHder()!=0);
NodoAVL<T> * q= pHder();
pHder(qHizq());
qHizq(p);
qH(0); // Actualiza FE
pH(0); // Actualiza FE
return q;
}

25/08/2014 30
Estructuras no lineales:
rboles Equilibrados AVL
25/08/2014 31
Estructuras no lineales:
rboles Equilibrados AVL
Rotacin doble a la Derecha

La Rotacin doble a la Derecha se utilizar cuando el
sub-rbol izquierdo de un nodo sea 2 unidades ms
alto que el derecho, es decir, cuando el FE= -2 y
adems la raz del sub rbol izquierdo tenga un FE =1,
es decir, cargado a la derecha.









Se hace rotacin simple de Q a la izquierda y
luego rotacin simple de P a la derecha.

25/08/2014 32
Estructuras no lineales:
rboles Equilibrados AVL
Rotacin doble a la Derecha

La Rotacin doble a la Derecha son dos rotaciones
simples, primero rotacin simple izquierda y luego
rotacin simple derecha.

25/08/2014 33
Estructuras no lineales:
rboles Equilibrados AVL
Rotacin doble a la Izquierda

La Rotacin doble a la Izquierda se utilizar cuando el
sub-rbol Derecho de un nodo sea 2 unidades ms alto
que el Izquierdo, es decir, cuando el FE= 2 y adems
la raz del sub rbol derecho tenga un FE = -1, es
decir, cargado a la Izquierda.









Se hace rotacin simple de Q a la Derecha y
luego rotacin simple de P a la Izquierda.

25/08/2014 34
Estructuras no lineales:
rboles Equilibrados AVL
Rotacin doble a la Izquierda

La Rotacin doble a la Izquierda son dos rotaciones
simples, primero rotacin simple derecha y luego
rotacin simple izquierda.

25/08/2014
Estructuras no lineales:
rboles Equilibrados AVL
Rotacin doble a la Izquierda
NodoAVL<T>* RotadobleDI(NodoAVL<T>* p) {
Assert (p!=0);
Assert(pHder()!=0 && pHder()Hizq()!=0);
NodoAVL<T> * q= pHder();
NodoAVL<T> * r= qHizq();
pHder(rHizq());
qHizq(rHder());
rHizq(p);
rHder(q);
if (rH()==0){
qH(0); pH(0); return r;
}
if (rH()==1){
qH(0); pH(-1);}
else{
qH(1); pH(0);
}
rH(0);
return r;
}


25/08/2014
Estructuras no lineales:
rboles Equilibrados AVL
Rotacin simple a la Izquierda
25/08/2014 37
Estructuras no lineales:
rboles Equilibrados AVL
Insercin en un rbol AVL O(log n)
1.- Buscar la posicin a insertar utilizando el
algoritmo de ABB desde la raz hasta insertar la nueva
hoja. O(log n)?

2.- se regresa a la raz modificando la condicin del
equilibrio por el camino (buscar pivote potencia nodo
con +-1).

3.-Si en el camino algn nodo cambia su condicin a
+-2 entonces se rota en ese nodo pasando a tener una
condicin de equilibrio 0 o 1.
25/08/2014 38
Estructuras no lineales:
rboles Equilibrados AVL
Insercin en un rbol AVL
Si en el camino algn nodo cambia su condicin a +-2
entonces se rota en ese nodo pasando a tener una
condicin de equilibrio 0 o 1.

Si el equilibrio del pivote es:

+2 y el equilibrio del hijo es +1: R simple izquierda.
+2 y el equilibrio del hijo es -1: R doble ID
-2 y el equilibrio del hijo es -1: R simple derecha.
-2 y el equilibrio del hijo es +1: R doble DI.

Mtodo de insercin
25/08/2014 39
Estructuras no lineales:
rboles Equilibrados AVL
25/08/2014 40
Estructuras no lineales:
rboles Equilibrados AVL
25/08/2014 41
Estructuras no lineales:
rboles Equilibrados AVL
Eliminar 42
25/08/2014 42
Estructuras no lineales:
rboles Equilibrados AVL
Eliminar 42
25/08/2014 43
Estructuras no lineales:
rboles Equilibrados AVL
Eliminar 42
25/08/2014 44
Estructuras no lineales:
rboles Equilibrados AVL
Eliminar 21
25/08/2014 45
Estructuras no lineales:
rboles Equilibrados AVL
Eliminar 21
25/08/2014 46
Estructuras no lineales:
rboles Equilibrados AVL
Eliminar 21
25/08/2014 47
Estructuras no lineales:
rboles Equilibrados AVL
Eliminar en un rbol AVL
Al eliminar un nodo y regresar por el camino de
bsqueda el factor de equilibrio:

Disminuye en 1 si la eliminacin se hizo por la rama
derecha.
Incrementa en 1 si la eliminacin se hizo por la rama
izquierda.
25/08/2014 48
Estructuras no lineales:
rboles Equilibrados AVL
25/08/2014 49
Estructuras no lineales:
rboles Equilibrados AVL
25/08/2014 50
Estructuras no lineales:
rboles Equilibrados AVL
Eliminar en un rbol AVL
Se utiliza una variable hh que indica que se
ha eliminado un nodo o que el rbol ha
perdido altura al reestructurar (rotar) el
rbol.

Es necesario dos rutinas de supresin
Equilibrar1: Cuando la altura de la rama
izquierda ha disminuido.
Equilibrar2: Cuando la altura de la rama
derecha ha disminuido.
25/08/2014 51
Estructuras no lineales:
rboles Equilibrados AVL
int Equilibrar1(NodoAVL<T> * p; int hh){
NodoAVL<T> * q;
NodoAVL<T> * r;
// Disminuye la rama izquierda
if (p H()==-1)
p H(0);
else
{if (p H()==0){
p H(1);
hh=0;}
else {
q=p Hder();
if (q H()>=0){
if (q H()==0)
hh=0; // no disminuye de
nuevo la altura
r=RotaSimpleI(N);}
else
r=RotaDobleDI(N);}
}
25/08/2014 52
Estructuras no lineales:
rboles Equilibrados AVL
int Equilibrar2(NodoAVL<T> * p; int hh){
NodoAVL<T> * q;
NodoAVL<T> * r;
// Disminuye la rama derecha
if (p H()==1)
p H(0);
else
{if (p H()==0){
p H(-1);
hh=0;}
else {
q=p Hizq();
if (q H()<=0){
if (q H()==0)
hh=0; // no disminuye de
nuevo la altura
r=RotaSimpleD(N);}
else
r=RotaDobleID(N);}
}


25/08/2014 53
Estructuras no lineales:
rboles Equilibrados AVL
Mtodo eliminar elemento en rbol AVL
25/08/2014 54
Estructuras no lineales:
rboles Equilibrados AVL
Creacin , Recorridos , rotaciones y eliminacin
de un nodo.
http://c.conclase.net/edd/?cap=008