Está en la página 1de 13

UNIVERSIDAD NACIONAL DE TRUJILLO

Escuela De Ciencias Fsicas Y Matemticas


Ingeniera Informtica
Curso:
Estructura de Datos
Profesor:
Iris Cruz
Alumno:
Montaez Julcamoro Marisol
Ocas Saldaa Jhoan
Pereda Santos Oscar Olavid
Portales Armas Freddy Giancarlo
Quispe Ramrez Angy
Sarachaga Flores Daniel
Suarez Prncipe Jos Alfred
2014 Trujillo

RBOLES AA
1. CONCEPTO:
En el campo de informtica se le conoce como rbol binario e bsqueda auto
balanceable utilizado para almacenar y recuperar informacin de manera eficiente. El
nombre de rboles AA se debe a su inventor Arne Anderson.
Son una simplificacin de las reglas de los rboles coloreados y originan un nmero
bastante menor de situaciones que deben ser analizadas
Loa rboles AA son una variacin del rbol-rojo-negro, que a la vez es una mejora del
rbol binario d bsqueda. A diferencia de los rboles rojo-negro, los nodos en un rboles
AA slo pueden aadirse como un hijo derecho. Ningn nodo puede ser un hijo izquierdo,
de esta forma se adeca a un rbol 2-3 en vez de un rbol 2-3-4, lo que simplifica las
operaciones de mantenimiento. Los algoritmos de mantenimiento para un rbol rojonegro necesitan considerar siete diferentes formas para balancear adecuadamente el
rbol. A continuacin observemos el grfico:

Pero ya que el requisito indica que slo los enlaces derechos pueden ser rojos, solo es
necesario considerar 2 formas:

Ejemplo de rbol de 3 nodos

2. ROTACIONES DE BALANCEO
Se diferencia de los rboles rojo-negros porque son generalmente usados con la idea de
un nivel en lugar de un color. Cada nodo tiene un ampo nivel y debe cumplir las
siguientes condiciones para que sea vlido:
1. El nivel de un nodo hoja es uno.
2. El nivel de un hijo izquierdo es estrictamente menor que el de su padre.
3. El nivel de un hijo derecho es menor o igual que el de su padre.
4. El nivel de un nieto derecho es estrictamente menor que el de su abuelo.
Cada nodo de nivel mayor que uno debe tener dos hijos. Se necesitan dos operaciones para que el

rbol AA se mantenga equilibrado.


Las operaciones son:
-Torsin (Skew):
Es una rotacin derecha que se realiza cuando una insercin o un borrado generan un
enlace horizontal izquierdo, puede ser un enlace rojo-izquierdo en el contexto rbol rojonegro
La funcin torcin es:
Entrada: T, un nodo que representa un rbol AA que requiere ser rebalanceado.
salida: Otro nodo que representa el rbol AA rebalanceado.
si nil(T) entonces
devuelve Nil
si no si nivel(izquierda(T)) == nivel(T) entonces
Cambia los apuntadores de los enlaces horizontales a la izquierda.
L = izquierda(T)
izquierda(T) := derecha(L)
derecha(L) := T
devuelve L
si no
devuelve T
fin si
fin de la funcin

La torsin Funcionara as:

-Divisin (Split):

Es una rotacin izquierda condicional que tiene lugar cuando una insercin o un borrado
crea dos enlaces horizontales derechos, pero se corresponde con os enlaces rojos
consecutivos en el contexto de rboles rojo-negro.

La funcin divisin es:


Entrada: T, un nodo que representa un rbol AA que requiere ser rebalanceado.
Salida: Otro nodo que representa el rbol AA rebalanceado.
si nil(T) entonces
devuelve Nil
si no si nivel(T) == nivel(derecha(derecha(T))) entonces
Tenemos dos enlaces horizontales a la derecha. Toma el de en medio, elvalo, y devulvelo.
R = derecha(T)
derecha(T) := izquierda(R)
izquierda(R) := T
nivel(R) := nivel(R) + 1
devuelve R
si no
devuelve T
fin si
fin de la funcin

3.INSERCIN
Se empieza con una bsqueda en un rbol binario y su procedimiento de insercin, luego,
a medida que se desenrolla la pila de llamadas, es fcil comprobar la validez del rbol y
realizar las rotaciones que se precisen. Si aparece un enlace horizontal izquierdo, se
realiza una torsin, y si aparecen dos enlaces horizontales derechos, se realiza una
divisin, despus incrementando el nivel del nuevo nodo raz del subrbol
correspondiente. Observe que el cdigo de muestra realiza un incremento de nivel (T). Lo
que hace que podamos continuar comprobando la validez del rbol a medida que las
modificaciones suben desde las hojas.
La insercin por la izquierda seguida de una torsin, puede originar una nueva violacin a
las propiedades de los rboles AA. Luego se dibuja en forma convencional, de acuerdo a
los niveles de los nodos. La ilustracin muestra la situacin luego del skew; lo cual
produce el doble rojo, o dos hijos horizontales, debe notarse que el recin insertado es la
nueva raz. La situacin se corrige con una rotacin a la izquierda, respecto del nodo
recin insertado, y luego incrementando el nivel del nodo central. Esta ltima operacin
se denomina partir (Split), y se deriva de los B-tres antecesores de los rboles AA, en los

cuales se divide un multinodo que excede el mximo nmero de claves en dos


multinodos.
Insercin por la izquierda Skew:

Insercin por la izquierda Skew y Split en el mismo nivel

Insercin por la izquierda Skew y Split en niveles de recursin diferentes:

Si se inserta por la derecha, si el padre no tiene descendiente derecho no hay


modificaciones que efectuar; pero si el padre es un descendiente derecho se producen
dos descendientes horizontales, la situacin equivale a dos rojos adyacentes, y se corrige
efectuando una rotacin a la izquierda, e incrementando en uno el nivel del nodo central;
es decir con un Split. No se requiere en este caso de la operacin skew.
a. Insercin por la derecha:

La operacin split, al subir el nivel de un nodo, puede ocasionar un nuevo descendiente


izquierdo de igual nivel que el padre o tres nodos adyacentes de igual nivel. Por esta
razn debe ascenderse hasta la raz, siguiendo la ruta por la que se descendi, para
ubicar la posicin de insercin, efectuando las operaciones skew y split, en ese orden, en
cada uno de los nodos de la ruta.
Sin embargo, como se ver ms adelante, en cada nivel de recursin, cuando debe
efectuarse una modificacin para mantener las propiedades slo se efecta un skew o un
split o un incremento de nivel.
Se han analizado las diferentes situaciones de insercin que se producen en el primer
nivel de un rbol AA. Esto se logr efectuando inserciones en un rbol con un nodo, e
inserciones en un rbol con dos nodos.
Aplicando las operaciones anteriores, puede comprobarse la estructura de los rboles AA,
para 4, 5, 6 y 7 nodos. Debe notarse que en cada diagrama hay que estudiar (n+1) casos
de insercin, ya que ste es el nmero de nodos externos, o los posibles lugares para
insertar el nuevo nodo.
Sin embargo si se observan las formas que se producen en los diferentes niveles, puede
deducirse que los casos de insercin analizados antes son los nicos que se presentan.

b) insercin por la izquierda


B de nivel i
Si el subrbol derecho era AA, los nodos C y D deben tener nivel (i-1). En la Figura 15.14,
se
Muestra el nodo n de nivel i, lo que viola las propiedades de un rbol AA, y la estructura
debe
Ser corregida. Segn se analiz antes, la nica forma en que un nodo aumenta su nivel
es
teniendo ambos hijos de igual nivel. Entonces si antes de insertar el nodo n el rbol era
AA, y si
el nodo n alcanza grado i quiere decir que lo ha logrado teniendo hijos de igual nivel. Esto
implica que a y b deben ser de nivel (i-1). Si A tiene padre debe ser de nivel (i+1).
*insercin por la izquierda B de nivel i.

En este caso luego de un skew en t, resulta el diagrama a la izquierda de la Figura 15.15;


y luego
del split en el nuevo t, resulta el subrbol AA a la derecha de la Figura 15.15. En este
caso,
debido a que el nodo A aumenta su nivel inicial, es preciso continuar la revisin
ascendente. La
situacin puede ser corregida, sin realizar rotaciones, cambiando solamente el nivel del
nodo A,
en la Figura 15.14. Ntese que se preserva la propiedad de que el nodo que aumenta su
nivel
tiene ambos hijos iguales y de un nivel menor.
*Insercin por la izquierda, cambio de nivel:

Ejemplos de insercin.
Si se realiza una insercin de claves en orden ascendente, desde el 1 hasta el 15, se
obtiene luego de las operaciones de re-balance, despus de cada insercin,
inmediatamente luego de insertado el nodo con valor 15.
Se devuelve siguiendo la ruta desde la raz al nodo insertado, pero en forma ascendente.
Como el nodo 15 cumple las propiedades, es un rbol AA; se asciende al 14, que tambin
es AA. Pero al ascender al 13, ste tiene dos hijos horizontales; entonces debe realizarse
un split en el nodo 13. El rbol cuya raz es el nodo con valor 14 es AA, notar que sta es
la raz luego del split.

Insercin de nodo con valor 15 en rbol AA

Al ascender al nodo con valor 12, tambin se cumplen las propiedades de los rboles AA.
Pero al ascender al nodo con valor 10, debe volver a efectuarse un split.

Continuando el ascenso, no es necesario efectuar correcciones en el nodo con valor 8,


pero al ascender a la raz, debe volver a efectuarse un split; que muestra un rbol
perfectamente balanceado, con raz 8. En secuencias de inserciones ascendentes slo es
necesario realizar operaciones splits.

A partir de una insercin de secuencias descendentes de claves. Se han insertado, en


forma descendente las claves desde 15 a 9, y luego se han efectuado las operaciones de
mantencin. La Figura, a la izquierda, muestra la insercin de un nodo con clave 8; lo cual
produce un descendiente izquierdo de igual nivel que su padre, por lo cual debe
efectuarse un skew, al ascender al nodo 9. A la derecha de la Figura, se muestra el rbol
AA resultante, ya que al recorrer la ruta ascendente, pasando por el 10 y llegando a la
raz 12, no es necesario efectuar mantenciones.

Luego de insertar el 8 y luego del skew en 9 y ascender hasta la raz.

Si en el rbol AA, a la derecha se inserta un nodo con valor 7, se tiene el diagrama a la


izquierda del diagrama.

La funcin insertar es
entrada: X, el valor a ser insertado, y T, la raz del rbol en el cual se insertar.
salida: Una versin balanceada de T que incluye a X.
Haz el procedimiento normal de insercin de un rbol de bsqueda binario.
Asigna al hijo correcto el resultado de la llamada recursiva en caso de que
un nodo nuevo fue creado o la raz del subrbol cambi.
si nil(T) entonces
Crea una nueva hoja con X.
devuelve nodo(X, 1, Nil, Nil)
si no si X < valor(T) entonces
izquierda(T) := insertar(X, izquierda(T))
si no si X > valor(T) entonces
derecha(T) := insertar(X, derecha(T))
fin si
Note que el caso X == valor(T) no est especificado. En esta implementacin,
no tendr ningn ejemplo. Se puede cambiar el comportamiento dependiendo de
la implementacin.
Se realiza la torsin y luego la diisin. Las condiciones de si sern hechas ambas
acciones estn dentro de los procedimientos ya descritos arriba.
T := torsin(T)
T := divisin(T)
devuelve T
fin de la funcin

4. RENDIMIENTO

El rendimiento de un rbol AA es equivalente al de un rbol rojo-negro. Un rbol AA realiza ms


rotaciones que un rbol rojo-negro, pero la mayor sencillez de sus algoritmos tiende a hacerlos ms
rpidos, y estos factores se compensan resultando en un rendimiento similar. Un rbol rojo-negro es
ms constante en su rendimiento que un rbol AA, pero un rbol AA tiende a ser ms llano lo que
produce menor tiempo de bsqueda.
Propiedades:
-Todos los nodos de un nivel superior a uno, tiene dos hijos, el nodo sucesor o predecesor,
tendr nivel 1, haciendo que su eliminacin sea trivial.
- El nivel de un hijo izquierdo debe ser menor que el nivel de su padre.
-El nivel de un hijo derecho debe ser menor o igual al nivel de su padre.
-El nivel de un nieto derecho debe ser menor que el nivel de su abuelo.
-Las hojas son de nivel 1.
-Los nodos que no son hojas deben tener dos hijos.

5. TIPOS DE DATOS

A continuacin se mostrarn algunos algoritmos para la creacin de rboles AA con


funciones.
typedef int data;
typedef struct node {
struct node *left, *right;
int nivel;
data clave;
} nodo, *pnodo;
typedef pnodo arbol;
//Varibles globales
pnodo nil;
nodo centinela;
void initglobalvariables()
{ nil=&centinela;
nil->nivel = 0; //nivel del centinela, est bajo las hojas.
nil->left = nil;
nil->right = nil;
}

Creacin de nodo.
La insercin se produce en las hojas, y siempre en nivel 1. Adems el nuevo nodo tiene sus descendientes
apuntando al centinela.
pnodo getnodo(data valor)
{ pnodo p = (pnodo) malloc(sizeof(nodo));
if (p==NULL) {printf("Error memoria\n"); exit(1);}
else
{ p->clave = valor;
p->left = nil; //apuntan al centinela
p->right = nil;
p->nivel = 1; //hojas en nivel 1.
}
return(p);
}

Operaciones bsicas.
/* rotacin derecha */
pnodo rrot(pnodo t)
{ register pnodo temp=t;
t = t->left;
temp->left = t->right;
t->right = temp;
return (t);
}
/* rotacin izquierda */
pnodo lrot (pnodo t)

{ register pnodo temp=t;


t = t->right;
temp->right = t->left;
t->left = temp;
t->nivel++;
return(t);
}
pnodo skew (pnodo t)
{ pnodo temp;
if (t->left->nivel== t->nivel ) //no falla, en los niveles inferiores, debido al centinela
{ /* rotacin derecha */
temp = t;
t = t->left;
temp->left = t->right;
t->right = temp;
}
return (t);
}
pnodo split (pnodo t)
if (t->right->right->nivel== t->nivel )
{ /* rotacin izquierda */
temp = t;
t = t->right;
temp->right = t->left;
t->left = temp;
t->nivel = t->nivel +1;
}
return(t);
}

if (t->right->right->nivel== t->nivel )
{ /* rotacin izquierda */
temp = t;
t = t->right;
temp->right = t->left;
t->left = temp;
t->nivel = t->nivel +1;
}
return(t);
}
}
CONCLUSIONES.
-Los rboles funcionan similarmente a las listas doblemente enlazadas
-Poseen Diferentes Funciones como insercin y Bsqueda.
-Los arreglos pueden ser modificados.
-Son aplicados con colores.

También podría gustarte