Arboles AA Kenneth Sanchez y Tamara Moscoso 8 de octubre del 2015 Abstract En la industria comercial, durante mucho tiempo se han pasado por alto metodos de ordenamiento con una eficiencia buena y en su lugar se ha hecho uso de metodos menos efectivos, de este problema nació la búsqueda por una manera más eficiente de organizar datos de manera jerárquica. En la siguiente investigación se tratará una de las soluciones encontradas para resolver el problema planteado, sencilla y utilizada en los últimos años ésta solución es un tema importante para el conocimiento e investigación de los estudiantes de carreras de computación: los árboles AA. 1 Introduction En este documento se realizara una investigación a profundidad sobre los arboles AA, tambien conocidos como los arboles Arne Andersson, en el presente trabajo se incluira diferentes aspectos informáticos de los arboles como estructuras de organización de datos, con el fin de obtener un mayor conocimiento de los temas relacionados con la funcionalidad de arbol AA y recopilar información obtenida con la investigación de los mismos que se ha estado realizando durante años. El lector podrá encontrarse con un análisis de los Arboles AA, en donde se comprenderá definiciones sobre estructuras de datos, indagara sobre los árboles, qué es un árbol y principales funciones de un árbol. Con el fin de tener bases sobre conceptos fundamentales y así estudiar las ventajas y desventajas presentes en los arboles AA y además se investigara sobre la variedad de usos que le se da en la actualidad. 2 Desarrollo 2.1 Estructura de datos Las estructuras de datos nacen a partir de la necesidad del programador de organizar la informacion y datos, que este posee para un problema en particular. Con lo cual la representacion de los datos es fundamental para la realizacion de dicha tareas, tanto asi que una de las funciones primordiales del programador y de la computacion no es realizar calculos, si no almacenar y recuperar datos, usualmente de la manera mas rapida posible [7]., y para ello se recurren a estructuras que se acoplen a la necesidad del problema. En la actualidad se utiliza el termino estructura de dato para referirse a un metodo de organizacion 1
para el tratamiento y recoleccion de datos, por ejemplo una lista de numeros enteros, pila, colas, entre otros [6], son considerados estructuras de datos. En este caso en particular se dara estudio a la estructura de datos denominada arboles. Por lo que el estudio de esta estructura y el algoritmo necesario para su manipulacion, es elemental para el programador conconer su funcionalidad para la resolucion de problemas futuros. 2.2 Arboles Los arboles son un tipo de estructura de datos utilizadas para almacenar información de manera ordenada, estas estructuras permiten no solo el almacenamiento de los datos sino también proveen la funcionalidad de búsqueda y eliminación de los mismos, todo esto de manera que no se pierda equilibrio y balanceo del árbol, brindando así una buena eficiencia en tiempo de ejecución [6]. Los árboles se especializan en el almacenamiento de datos de tipo jerárquico, ya que están compuestos por padres y sus respectivos nodos, de manera que la información se ordena en un modo de jerarquía, estos juegan un papel central en el diseño y análisis de algoritmos, describen propiedades dinámicas de los algoritmos, se pueden encontrar en todo tipo de estructuras de programas actuales, además, son encontrados en la mayoría de estructuras de tipo jerárquicas que se encuentran en la vida cotidiana [7]. Como se dijo anteriormente, un árbol tiene padres y nodos, pero su estructura está compuesta por cierta cantidad de nodos, de estos uno de ellos se denomina raíz, este es el primer elemento y no tiene padre, todos los demás nodos tienen su respectivo padre, que sería el nodo situado inmediatamente superior a los mismos. El problema con los arboles es que es muy sencillo realizar uno, pero lograr optimizarlo para que pueda ser utilizado en búsquedas eficientes es un procedimiento que puede llegar a ser muy complicado, para esto se utilizan métodos de balanceo de manera que los arboles puedan quedar correctamente balanceados y a su vez estén equilibrados, de esta manera las búsquedas se aceleran y generan un tiempo más eficiente ya que cada rama toma un tiempo establecido en ser recorrida [7]. Por lo que distintas variaciones de arboles han sido desarolladas en este caso se estudiara el creado por Arne Ardensson, el arbol AA. 2.3 Arboles AA Los arboles AA fueron creados por Arne Andersson en su trabajo Balanced search trees made simple [2]. Los arboles como estructura de datos poseen grandes cualidades en tiempo de ejecución las cuales pueden ser O(log n) en el mejor de los casos, ya que el tiempo de ejecucion es proporcional a la altura del arbol por lo que entre mayor altura del arbol, mayor ineficiencia [1], Arne Andersson busco una solucion que si bien no brindara una mejora considerable en el tiempo de ejecucion, esta balanceara al arbol con mayor sencillez evitando gran altura en los arboles, ya que Arne creia que los problemas se debian al criterio con el cual el programador mantenia el balance de su arbol [1]. Los arboles son comunmente balanceados por dos metodos, el primero se realiza mediante un factor de equilibrio en cada nodo que equivale a la comparacion de las alturas en rama derecha y la rama izquierda [3], mientras que el segundo metodo utiliza pseudo-nodos los cuales son utilizados para denotar arboles de busqueda de multiples vias, tal y como lo realiza el arbol rojo-negro, 2
en donde se consideran los nodos rojos como enlaces horizontales y nodos negros como verticales, los enlaces verticales crean un unico pseudo-nodo mientras que los enlaces verticales conectan dos pseudo-nodos estos se asignan un valor de nivel siendo uno el mas bajo(hojas) [3]. Aun que el metodo utilizado en los arboles rojo-negro es eficiente este contiene una gran cantidad de casos especiales, con los cuales se aplican las rotaciones especificas, asi que Ardersson decidio utilizar la siguiente regla, asegurese que solo los bordes derechos sean horizontales, antes de revisar el tamaño del pseudo-nodo. Con esto estipulado la variedad de casos a realizar se ve reduccido a tan solo dos casos posibles: raiz nodohijoder y a raiz nodohijoder NodoHijoADer [2]. Una vez teniendo una reduccion tan relevante de casos, los algoritmos se ven simplificados por lo que, la gran cantidad de rotaciones necesarias antes utilziadas seran sustituidas por tan solo dos funciones, Skew y Split,las cuales significan torsion y division. Ademas se implementan niveles, siendo el nivel 1 las hojas y esta va en aumento segun la altura. 2.4 Arboles AA; Skew Metodo creado para equilibrar, su funcion costa en eliminar las relaciones que tenga el nodo p hacia su izquierda, ya que como estipula Andersson solo se puede trabajar sobre dos casos y ambos involucran la derecha. Para realizar esto se estudia los enlaces del nodo, en donde se realiza una rotacion a la derecha cada vez que se encuentra una relacion hacia la izquierda [2]. 2.5 Arboles AA; Split Funcion inventada para balancear, su mision es dividir o simplificar un nodo subiendo un nivel a todo nodo secundario caso que se da solo si el pseudo-nodo de este es muy grande, en este caso solo se utiliza los enlaces hacia la derecha del nodo y se realizan rotaciones hacia la izquierda [2]. 2.6 Insertar y eliminar Con el conocimietno de estas funciones Ardersson crea el siguiente pseudocodgio para el ingreso datos en un arbol, algoritmo ilustrado por la figura 1: Agrega un nodo al nivel 1 Realiza un Skew(nodo ingresado) Realiza un Split(nodo ingresado) 3
Figure 1: Muestra el comportamiento de la funcion insertar [1]. Como se puede apreciar en la figura 1, al insertar el 6 dispara un skew, el cual rota hacia la derecha al 6, ya que el nivel del 5 aumenta se procede a dividirlo con un split, sin embargo no es hasta un skew final que el arbol finalmente queda balanceado Mientras que el eliminado de datos contemplara los siguientes procedimientos; Remueve nodo del nivel 1 Revisa los enlaces que poseia el nodo Realiza un Skew(padre del nodo eliminado) Realiza un Split(padre del padre) Figure 2: Muestra el comportamiento de la funcion eliminacion [1]. 4
Al observar la imagen comprendemos el comportamiento de la eliminacion de un nodo en un arbol AA, al eliminar el 1, se pierde el balance con los niveles, a lo que se procede a realizar un split para reducir el nivel tanto del padre del nodo eliminado, como el padre del padre. Se detecta la anomalia en la cantidad de nodos por nivel a lo que realiza un skew y un split, volviendo asi a su estado de 3 niveles y balanceado. De esta manera Andersson fue capaz de crear un algoritmo capaz de competir con los algoritmos postulados, siendo este una alternativa fiable para la creacion de soluciones usando arboles auto balanceables. 2.7 Usos de los arboles AA Actualmente se dice que estamos rodeados por árboles de datos, estructuras tan comúnmente vistas como HTML son elementos contenidos en otros elementos hasta llegar a la raíz, es decir, un árbol, incluso los discos duros de las computadoras están compuestos por arboles de datos [4]. En el mundo actual casi todas las expresiones de relaciones jerárquicas son demostradas por medio de árboles de datos. Los arboles AA son mayoritariamente utilizados para programación funcional y se encuentran implementados en arrays asociativos. Además son muy útiles en la elaboración de estructuras de datos implementadas en geometría computacional. Debido a su gran eficiencia en el tiempo de borrado, inserción y búsqueda, estos son mayoritariamente utilizados en programas que trabajan en tiempo real, los arboles AA siempre se empeñan en garantizar un peor caso con un tiempo eficiente, razón por la cual han sido tan comúnmente usados. En general estas estructuras de datos son utilizadas en el mercado en grandes cantidades para programas que necesitan de un alto rendimiento en tiempo de ejecución y almacenan grandes cantidades de datos [5].Por lo que el desarollo brindado por los arboles AA es vital para el crecimiento tanto de las aplicaciones del codigo, como la evolucion de su codigo y algoritmo. 3 Conclusion Los arboles AA son una manera más eficiente y funcional de almacenar datos ordenados jerarquicamente, estas estructuras de datos son vitales para la organizacion de grandes cantidades de información que se necesitan insertar, buscar e incluso eliminar. Creados por Arne Andersson y basados en los arboles Rojo- Negros, los arboles AA mantienen un buen balanceo por medio de metodos sencillos, reemplaza los metodos usados en otros arboles por los simples Split y Skew, logrando un balanceado tan solo utilizando dos pasos. Debido a todas sus mejorias conforme a los arboles usados anteriormente, los Arboles AA podrían seguir siendo utilizados ampliamente en la industria. 5
References [1] Andersson, A. Balanced search trees made simple. 60 71. [2] Andersson, A. General balanced trees. Journal of algorithms 30 (1999), 1 18. [3] Andjelkovic, S. Formalizing arne andersson trees and left-leaning redblack trees in agda. 2 23. [4] Garcia, C., de Rezende, J., and Calheiros, C. Astral: Um ambiente para ensino de estruturas de dados através de animações de algoritmos. Universidade Estadual de Campinas (S.F). [5] Ottman,. T., and Widmayer, P. algorithmen und datenstrukturen. Springer Verlag 1 (2011). [6] Shaffler, A. Data structures and algorithms analysis. Virginia tech (2012). [7] Wirth, N. Algorithms and data structures. Oberon 1 (2004), 120 179. 6