Árboles aa
TRANSCRIPT
![Page 1: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/1.jpg)
Árboles AA
Estudiantes:
Mariela Barrantes Mata
Jorge Calderón Díaz
Samuel Yoo
Gabriel Pizarro Picado
![Page 2: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/2.jpg)
¿Qué son los árboles AA?
Es un tipo de árbol binario de búsqueda auto-
balanceable, es decir, intenta mantener su altura
o su número de nodos bajo la raíz, tan pequeña
como sea posible en todo momento,
automáticamente.
Estos son una variación del árbol rojo-negro y
una mejora del árbol binario de búsqueda.
![Page 3: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/3.jpg)
Se debe cumplir el estricto requisito de que solo los enlaces derechos pueden ser rojos y a diferencia de los árboles rojo-negro, estos se implementan con la idea de nivel y no de color.
Para mantener el equilibrio de este se necesitan dos operaciones llamadas torsión (skew) y división (split).
![Page 4: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/4.jpg)
Algunas funciones
Sirven para almacenar y recuperar
información ordenada de manera eficiente.
En el ámbito computacional se utiliza para
organizar información compuesta por datos
comparables.
![Page 5: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/5.jpg)
Características importantes
Las condiciones para que el árbol sea válido son las siguientes: 1. El nivel de un hijo izquierdo debe ser menor que el nivel
de su padre.
2. El nivel de un hijo derecho debe ser menor o igual al nivel de su padre.
3. El nivel de un nieto derecho debe ser menor que el nivel de su abuelo.
4. El nivel de un nodo hoja es 1.
5. Cada nodo de nivel superior a uno debe tener dos hijos.
Los nodos tienen nivel y no color.
![Page 6: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/6.jpg)
Algoritmos de
Balanceo
![Page 7: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/7.jpg)
Algoritmos de Balanceo
El árbol AA es una variación de árbol rojo-negro,
que a su vez es una mejora de árbol binario de
búsqueda. A diferencia de los arboles rojo-negro,
los nodos rojos en un árbol AA solo pueden
añadirse como un hijo derecho.
En un árbol AA, al cumplirse el requisito de un
solo los enlaces derechos pueden ser rojos, solo
es necesario considerar dos formas de balanceo:
![Page 8: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/8.jpg)
Torsión (Skew)
La torsión es una rotación derecha que se
realiza cuando una inserción o un borrado
genera un enlace horizontal izquierdo, puede
pensarse como un enlace rojo izquierdo en el
contexto del árbol rojo-negro.
![Page 9: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/9.jpg)
División (Split)
La división es una rotación izquierda condicional que tiene lugar cuando una inserción o un borrado crea dos enlaces horizontales derechos, lo que de nuevo se corresponde con dos enlaces rojos consecutivos en el contexto de los árboles rojo-negro
![Page 10: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/10.jpg)
Ejemplo
Balanceo al agregar un número
Primero se agrega a la raíz un nodo.
En este ejemplo será 70.
![Page 11: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/11.jpg)
Después se inserta el 50.
![Page 12: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/12.jpg)
Como el 50 es menor a 70 entonces se mueve a la izquierda del 70.
Sin embargo, como en los arboles AA se balancea hacia la derecha entonces aquí se da un skew (torsión).
Quedaría de la siguiente manera:
![Page 13: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/13.jpg)
Ahora se inserta el 80.
![Page 14: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/14.jpg)
Como el 80 es mayor que 50 y 70, entonces se va a
colocar en la parte derecha del nodo 70.
![Page 15: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/15.jpg)
Sin embargo, como el pseudópodo (nodo de igual
rango) es muy grande, se hace una división en 50,
donde el 50 baja y queda a la izquierda del 70.
Quedaría de la siguiente manera:
![Page 16: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/16.jpg)
Búsqueda
![Page 17: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/17.jpg)
Búsqueda
Para hacer la búsqueda con arboles AA, se puede hacer de la siguiente manera: primero, se empieza con la raíz.
Si la raíz es igual al número que se busca, entonces retorna verdadero.
Si no es igual, entonces compara si el número es mayor o menor a la raíz.
Si es menor, entonces va hacia el nodo hijo izquierdo.
Si es mayor a la raíz entonces va hacia el nodo hijo derecho. Se hace el mismo procedimiento solo que con el nodo hijo hasta llegar hasta una hoja.
Si la hoja no es igual al número que se busca, entonces retorna falso.
![Page 18: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/18.jpg)
Ejemplo
![Page 19: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/19.jpg)
Se quiere buscar el número 39
Entonces se empieza desde la raíz.
Como 39 es menor a 45 y son diferentes, entonces va hacia la
el nodo hijo izquierdo.
Como el número es más grande que 21 y diferente, entonces
va hacia la derecha.
Como 39 es mayor, entonces va hacia el nodo que contiene el
43.
Como 39 es menor, entonces va hacia la izquierda, al número
36.
Como el número es más grande, va a ir hasta el 39, cual es el
número que se desea encontrar.
Como la encuentra retorna true.
![Page 20: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/20.jpg)
Inserción
![Page 21: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/21.jpg)
Inserción
Todos los nodos inicialmente se insertan como nodos hoja utilizando el estándar del árbol de búsqueda binaria.
Enlaces horizontales en los árboles AA
◦ Los cinco condiciones de árboles AA imponen restricciones a los enlaces horizontales
◦ Si alguno de las condiciones se violan el árbol debe ser modificado hasta que, una vez más cumple con las cinco condiciones
◦ Sólo dos casos deben ser considerados y corregidos para mantener el equilibrio de un árbol AA
![Page 22: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/22.jpg)
Caso #1:
Enlace horizontal izquierda no se les permite
◦ Violar la condición # 2, el nivel de un hijo izquierdo
es estrictamente menor que la de su padre
◦ Una operación de sesgo o inclinación se introdujo
para manejar este caso
![Page 23: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/23.jpg)
Caso #2
Dos enlaces horizontales correctas consecutivas
no se les permite
◦ Violar la condición # 4, el nivel de un nieto derecha es
estrictamente menor que el de su abuelo
◦ Una operación de división será introducido para manejar este caso
![Page 24: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/24.jpg)
Ejemplo
Insertar 6
![Page 25: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/25.jpg)
Insertar 2
![Page 26: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/26.jpg)
Insertar 8
![Page 27: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/27.jpg)
Insertar 16
![Page 28: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/28.jpg)
Insertar 10
![Page 29: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/29.jpg)
Insertar 1
![Page 30: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/30.jpg)
Eliminar
![Page 31: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/31.jpg)
Eliminar
A la hora de eliminar un nodo pueden presentarse 3
casos:
◦ Eliminar una hoja.
◦ Eliminar un nodo con un hijo.
◦ Eliminar un nodo interno
![Page 32: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/32.jpg)
Caso I: Eliminar una hoja
Para eliminar una hoja (nodo sin hijos), basta con
borrarla.
Ejemplo: Se quiere eliminar el nodo 81.
![Page 33: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/33.jpg)
Caso II: Eliminar un nodo con un hijo
En este caso, se reemplaza el nodo a eliminar con su
hijo. Por ser un árbol AA, un hijo único siempre será
derecho.
Ejemplo: Se quiere eliminar el nodo 88.
![Page 34: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/34.jpg)
Caso III: Eliminar nodo interno
Cuando el nodo a eliminar tiene 2 hijos, este se
sustituye por el sucesor o antecesor inmediato.
Ejemplo: Eliminar nodo 86.
![Page 35: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/35.jpg)
Rebalanceo
Luego de eliminar un nodo, puede ser necesario
rebalancear el árbol.
Para esto se deben recorrer los nodos desde la
posición del nodo eliminado hasta la raíz revisando
que sus niveles cumplan con las reglas.
Al encontrarse una anomalía, se ejecutan las
siguientes operaciones:
![Page 36: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/36.jpg)
#1
Se debe decrementar el nivel de un nodo cuando:
Alguno de los hijos está mas de un nivel más
abajo.
Un nodo hoja es hijo de otro nodo cuyo nivel
ha sido decrementado.
![Page 37: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/37.jpg)
#2
Torsionar el nivel de un nodo cuyo nivel fue disminuido
Torsionar el sub-árbol desde la raíz, donde el
nodo decrementado es la raíz.
Torsionar el hijo derecho de la raíz.
Torsionar el hijo derecho del hijo derecho de
la raíz.
![Page 38: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/38.jpg)
#3
Dividir el nivel del nodo cuyo nivel fue decrementado
Dividir la raíz del sub-árbol.
Dividir el hijo derecho de la raíz.
![Page 39: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/39.jpg)
Ejemplo 1
Tomamos el siguiente árbol, y eliminamos el
nodo 14.
![Page 40: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/40.jpg)
Este caso corresponde con el caso II, donde el nodo a eliminar tiene solamente un hijo.
Como corresponde, se sustituye por este.
![Page 41: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/41.jpg)
Ejemplo 2
Eliminaremos el nodo 71, la raíz.
![Page 42: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/42.jpg)
Este es el caso #3.
Buscamos el sucesor del nodo, este es el 76.
![Page 43: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/43.jpg)
Al ser este un nodo interno, nos topamos de nuevo con el caso #3, tomamos entonces alternativamente su nodo antecesor: el 73.
![Page 44: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/44.jpg)
Sustituimos entonces el nodo 71 por el 73.
![Page 45: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/45.jpg)
Seguidamente hacemos una división en el nodo hijo derecho, que es el 76, mediante una rotación hacia la izquierda.
![Page 46: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/46.jpg)
Con esto el árbol queda balanceado.
![Page 47: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/47.jpg)
Ejemplo 3
En el mismo árbol, eliminamos el nodo 3.
Este es una hoja, por lo tanto para eliminarlo basta con quitarlo.
![Page 48: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/48.jpg)
Sin embargo, esto causa que el árbol se desbalancee,
pues 8 tiene más de 2 enlaces horizontales
consecutivos.
![Page 49: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/49.jpg)
Para solucionarlo, se hace una división. Se sube el nodo del medio, es decir, el 38.
![Page 50: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/50.jpg)
Esto deja el árbol balanceado
![Page 51: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/51.jpg)
Ejemplo 4
Se tiene el siguiente árbol y se quiere eliminar el nodo 1:
![Page 52: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/52.jpg)
Al eliminar el nodo 1, el nodo 2 viola la condición #5 pues queda con un solo hijo.
![Page 53: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/53.jpg)
Se debe decrementar el nivel del nodo 2.
Esto causa que el nodo 4 esté más de un nivel sobre su nodo hijo.
![Page 54: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/54.jpg)
Se debe decrementar el nivel del nodo 4, y por lo tanto también el del nodo 10, pues está en el mismo nivel.
![Page 55: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/55.jpg)
El nodo 4 queda con dos nodos consecutivos en el mismo nivel y 10 viola la condición #2 al tener un hijo izquierdo en el mismo nivel.
![Page 56: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/56.jpg)
Luego de decrementar los niveles se comienza a torsionar, primero el nodo 4 (no causa cambios) y luego el su hijo derecho (nodo 10).
![Page 57: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/57.jpg)
Luego se torsiona el nodo derecho del derecho (nuevamente 10).
![Page 58: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/58.jpg)
Seguidamente se aplica la división al nodo 4. Vemos como 6 pasa a ser la raíz.
![Page 59: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/59.jpg)
Finalmente se divide el nodo derecho, es decir
el 8.
![Page 60: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/60.jpg)
Árbol completamente balanceado.
![Page 61: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/61.jpg)
Ejemplo 5
En el mismo árbol anterior ahora borramos el nodo 5.
Al ser una hoja, simplemente se elimina.
![Page 62: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/62.jpg)
Esto nos deja el nodo 4 violando la condición #5 y con un hijo al lado izquierdo.
Se decrementa como es usual y hacemos una torsión al nodo 4.
![Page 63: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/63.jpg)
Tenemos un enlace izquierdo con más de 1 elemento consecutivo, por lo tanto se hace la división y se asciende el nodo del medio: el 3.
![Page 64: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/64.jpg)
Con ese último movimiento el árbol queda balanceado.
![Page 65: Árboles AA](https://reader034.vdocuments.pub/reader034/viewer/2022042503/559fec151a28abd2768b467f/html5/thumbnails/65.jpg)
Bibliografía Wilburn, T. (2012, 03 de Noviembre). Adventures in data structure: AA Trees Recuperado el
10 de Noviembre del 2013, de
http://thomaswilburn.net/typedefs/index.php/tree/aa/aa_trees.html
Moscola, J. (2012, 25 de Octubre). CS 350: Data Structures. AA Trees Recuperado el 10 de
Noviembre del 2013, de http://faculty.ycp.edu/~dbabcock/cs350/lectures/AATrees.pdf
Heger, D. (s. f.). A Disquisition on The Performance Behaviour of Binary Search Tree Data
Structures The European Journal for the Informatics Professional, 5. Recuperado el 11 de
Noviembre del 2013, de http://www.cepis.org/upgrade/files/full-2004-V.pdf
Andersson, A. (1993). Balanced search trees made simple. Proc. Workshop on Algorithms
and Data Structures, 1, 60-71.
González, E. (2013, 13 de Mayo). Arbol AA Recuperado el 11 de Noviembre del 2013, de
http://www.slideshare.net/HALO2Y3/arbol-aa?from_search=1
Silva L. (2010). Estructuras de Datos y Algoritmos, capitulo 15. Recuperado de la dirección
http://www2.elo.utfsm.cl/~lsb/elo320/clases/c15.pdf