Heinsohn Privacidad y Ciberseguridad para el sector educativo
Arbol AA
1. REPUBLICA BOLIVARIANA DE VENEZUELA
MINISTERIO DEL PODER POPULAR PARA LA DEFENSA
UNIVERSIDAD NACIONAL EXPERIMENTAL DE LA FUERZA ARMADA
MERIDA-UNEFA
PROF:
JAVIER RIVERA
BACHILLERES:
SUAREZ ADRIANA.
CI:19.383.918
SEGOVIA ROXANA.
CI:21.154.201
GLEUDYS PARRA
CI:20.572.132
SECCION: IST-S6-D01
ARBOL AA
2. ÁRBOLES AA
DEFINICION:
Los árboles AA, así denominados por las iniciales de su creador, son una simplificación de las reglas de los árboles coloreados y originan
un número bastante menor de situaciones que deben ser analizadas. Además de las reglas de los árboles coloreados, sólo se permiten
nodos rojos como descendientes derechos.
En estos árboles, en lugar de la información sobre el color, se almacena el nivel del nodo; las hojas son de nivel 1. En lugar de color rojo se
habla de enlace derecho horizontal, o de un nodo descendiente derecho con igual nivel que su padre.(Profesor Leopoldo Silva Bijit)
Mediante árboles binarios de búsqueda balanceados, se han desarrollado algoritmos eficientes para mantener diccionarios, que garantizan un
costo logarítmico de las operaciones en peor caso.
n=1______________________1
0
n=2____________________1
0
n=3____________________2
____________________1
0
Árboles AA, de hasta 3 nodos
PROPIEDADES DE LOS ÁRBOLES AA.
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.
El número de nodos visitados, desde la raíz hasta las hojas, por la vía más larga debe ser a lo más el doble del número de nodos recorridos por la
vía más corta. Esto asegura un costo logarítmico para las operaciones.
3. ANÁLISIS DE OPERACIÓN DEL ÁRBOL AA.
1. ANÁLISIS DE LA OPERACIÓN INSERCIÓN:
Un nuevo nodo que será de nivel 1, se inserta en las hojas, que también son de nivel 1.
Se presentan dos casos.
a)Si se inserta por la izquierda se viola la regla de sólo horizontales derechos, y debe efectuarse una rotación derecha,
descendiendo desde la raíz, se determina la posición para insertar como se observa con la flecha en la figura.
________________1
_________________
_________________1
_________________1
Inserción por la izquierda. Skew
Al centro, se muestra una representación convencional, con un nodo descendiente horizontal izquierdo. En la parte inferior
se muestra luego de una rotación derecha, respecto del padre del nodo insertado; ahora se cumplen las propiedades de un
árbol AA. Se definió esta operación como torcer (skew )
b) 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 situación equivale a dos rojos
adyacentes, y se corrige efectuando una rotación 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 operación skew.
4. ANÁLISIS DE OPERACIÓN DEL ÁRBOL AA.
1. ANÁLISIS DE LA OPERACIÓN INSERCIÓN:
Sin embargo cada nivel de recursión, cuando debe efectuarse una modificación para mantener las propiedades sólo se
efectúa un skew o un split o un incremento de nivel dependiendo de la ruta del nodo.
Ejemplos de inserción.
Si se realiza una inserción de claves en orden ascendente, desde el 1 hasta el 15, se obtiene luego de las operaciones
de rebalance, después de cada inserción, inmediatamente luego de insertado el nodo con valor 15.
Se devuelve siguiendo la ruta desde la raíz al nodo insertado, pero en forma ascendente. Como el nodo 15 cumple las
propiedades, es un árbol AA; se asciende al 14, que también es AA. Pero al ascender al 13, éste tiene dos hijos
horizontales; entonces debe realizarse un split en el nodo 13. El árbol cuya raíz es el nodo con valor 14 es AA, notar que
ésta es la raíz luego del split.
- Inserción de nodo con valor 15 en árbol AA. - Luego de split en nodo con clave 13.
Al ascender al nodo con valor 12, también se cumplen las propiedades de los árboles AA. Pero al ascender al nodo con
valor 10, debe volver a efectuarse un split.
5. ANÁLISIS DE OPERACIÓN DEL ÁRBOL AA
2. DISEÑO DE LAS OPERACIONES SKEW Y SPLIT.
Este diseño puede realizarse de manera recursiva o de arriba hacia abajo, es así como se encuentra la siguiente la operación
denominada:
La operación torcer o skew la cual elimina los hermanos horizontales izquierdos bajo el nodo.
• Se desciende por la derecha efectuado rotaciones derechas cuando se encuentra un enlace izquierdo.
• Si un nodo tiene más de un hermano derecho de igual nivel debe partirse o realizar la operación split, aumentando el nivel
de cada segundo nodo en el descenso y se desciende por la derecha, efectuando rotaciones izquierdas.
Debido a que tanto la inserción como el descarte requieren recorrer una ruta desde la raíz hasta las hojas, es preferible realizar
la mantención de las propiedades de los árboles AA, desde abajo hacia arriba.
2.1 Inserción por la izquierda:
a) B de nivel i
Si el subárbol derecho era AA, los nodos C y D deben tener nivel (i-1). 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.
b) B de nivel (i-1).
El nodo C debe tener nivel (i-2). D puede ser de nivel (i-1) o (i-2). Si A es hijo izquierdo, su
padre tiene nivel (i+1); y si es hijo derecho podría ser de nivel i.
Luego del skew en t, el árbol es AA, es preciso continuar la revisión ascendente si A era un hijo derecho, ya que en este caso
podrían producirse tres nodos consecutivos de igual nivel.
2.2 Inserción por la derecha.
En este caso B debe ser de nivel (i-1). Si en el ascenso por el lado derecho, n incrementó su nivel, debe cumplirse que sus
hijos son de nivel (i-1). El árbol es AA, y no requiere modificaciones.
6. .ANÁLISIS DE OPERACIÓN DEL ÁRBOL AA
2. DISEÑO DE LAS OPERACIONES SKEW Y SPLIT.
Características
Si niveles de los hijos de t son iguales, aumentar el nivel de t.
Si son diferentes:
Si hijo izquierdo de t es de igual nivel que t: torcer
Si son diferentes:
Si nieto derecho de t es de igual nivel que t: partir.
“Es impotante tener en cuenta que para mantener las propiedades de un árbol AA, es necesario balancear los nodos,
que se recorren al descender para insertar, en forma ascendente hasta la raíz”.
3. ANÁLISIS DEL DESCARTE.
Se refiere al proceso de ajuste de niveles en el ascenso ya que si se ha borrado una hoja en uno de los subárboles
de t, de nivel (i+1). Corresponde recuperar las
propiedades del árbol con raíz A, apuntado por t.
Presenta los siguientes dos casos:
Ascenso por la izquierda.
a. Nivel (i+1). Esto implica que deben ser de nivel i. por ejemplo si se tienen 4 subcasos. E de nivel i o (i-1) y F de nivel i o (i-1)
b. Nivel i. C debe ser (i-1) no importa el nivel
Ascenso por la derecha.
a. Nivel i debe ser de nivel (i-1) luego de corregir nivel sólo en A se procede al siguiente diagrama a la derecha.
b. Nivel i-1. El nivel debe ser (i-1). Luego a la derecha muestra la corrección del nivel de A
7. .
ANÁLISIS DE OPERACIÓN DEL ÁRBOL AA
4. CENTINELAS Y ENCABEZADOS.
En aplicaciones con estructuras que tienen un inicio y un final, el diseño de las funciones requiere un tratamiento especial en
los bordes este suele ser inicio introduciendo como primer elemento un nodo denominado encabezado, así también para
finalizar la estructura puede agregarse un nodo denominado centinela que facilite las operaciones en la base de la estructura.
CODIGO ARBOL AA
int data;
class nodo {
class nodo *left, *right;
int nivel;
data clave;
} nodo, *pnodo;
pnodo arbol;
//Variables globales
pnodo nil;
nodo centinela;
void initglobalvariables(){
nil=¢inela;
nil->nivel = 0; //nivel del centinela,está bajo las hojas.
nil->left = nil;
nil->right = nil;
}
//Buscar con centinelas
pnodo arbol;
//Varibles globales
pnodo nil;
nodo centinela;
void initglobalvariables(){
nil=¢inela;
nil->nivel = 0; //nivel del centinela, está bajo las hojas.
nil->left = nil;
nil->right = nil;
} //buscarpnodo Buscar2(data x, pnodo p)
{ if (p==nil) return NULL;
while ( p != nil)
{ if (p->clave>x) p=p->left; //primera comparación
else if (p->clave< x) p=p->right; //segunda comparación
else return p; //lo encontró
} return (NULL);
}
8. CODIGO ARBOL AA
La siguiente tiene una comparación y dos asignaciones en el peor
caso, en cada pasada por el
lazo de repetición. Se emplea esta forma en la operación descarte.
pnodo Buscar1(data x, pnodo p){
pnodo t=p;
if (p==nil) return NULL;
while ( p != nil)
if (p->clave>x) p=p->left; else {t=p; p=p->right;}
if(t->clave==x) return t;
else
return (NULL);
//creacion del nodo
pnodo getnodo(data valor){
pnodo p = (pnodo) malloc(sizeof(nodo));
if (p==NULL) {printf("Error memorian"); exit(1);}
else{
p->clave = valor;
p->left = nil; //apuntan al centinela
p->right = nil;
p->nivel = 1; //hojas en nivel 1.
}
return(p);
}
//recorrer el arbol
void prtnivel(pnodo p){
if (p!= nil) {
prtnivel(p->left);
cout << ("%d,%d ", p->clave, p->nivel);
prtnivel(p->right);
}
}
//operaciones basicas
/* rotación derecha */
pnodo rrot(pnodo t)
{ register pnodo temp=t;
t = t->left;
temp->left = t->right;
t->right = temp;
return (t);
}
/* rotación izquierda */
pnodo lrot (pnodo t)
{ register pnodo temp=t;
t = t->right;
temp->right = t->left;
t->left = temp;
t->nivel++;
return(t);
}
9. CODIGO ARBOL AA
pnodo skew (pnodo t){
pnodo temp;
if (t->left->nivel== t->nivel ){ //no falla, en los niveles inferiores, debido al centinela
/* rotación derecha */
temp = t;
t = t->left;
temp->left = t->right;
t->right = temp;
}
return (t);
}
pnodo split (pnodo t){
pnodo temp;
if (t->right->right->nivel== t->nivel ){
/* rotación izquierda */
temp = t;
t = t->right;
temp->right = t->left;
t->left = temp;
t->nivel = t->nivel +1;
}
return(t);
}
10. REFERENCIAS
Silva B, L. (2010).Arboles AA. Capitulo 15. 1,2,3,7,8,9,10. Recuperado de: www2.elo.utfsm.cl/~lsb/elo320/clases/c15.pdf
García, G.(2011) .Arboles y Clasificación. 41,47,48,49, Recuperado de: garciagregorio.webcindario.com/ed/arboles_clasificacion.pdf
Andrés Yedith(2012).balanceo de un arbol binario de búsqueda arboles AA rojos y negros animación estructuras.
Recuperado de: https://www.youtube.com/watch?v=_JRjD6_eeKU
Publicado el 23/08/2015 Árboles Binarios de Búsqueda | Curso de C++ | Episodio 10. Recuperado de:
ttps://www.youtube.com/watch?v=dCT-kuqpIGw