1.3. Operaciones bsicas sobre rboles binarios...pg. 9
1.4. Aplicaciones..pg. 12
1.5. rboles balaceados (AVL)..pg. 13
Conclusin.pg. 23
Bibliografa.pg. 24
3
1. RBOLES.
1.1 Concepto de rbol.
Un rbol es una estructura no lineal en la que cada nodo puede apuntar a uno o varios nodos. Tambin se suele dar una definicin recursiva: un rbol es una estructura compuesta por un dato y varios rboles. La forma grfica se puede apreciar como sigue:
En relacin con los nodos, debemos definir algunos conceptos como:
Nodo hijo: Cualquiera de los nodos apuntados por uno de los nodos del rbol. En el ejemplo, L y M son hijos de G. Nodo padre: Nodo que contiene un puntero al nodo actual. En el ejemplo, A es padre de B, C y D.
En cuanto a la posicin dentro del rbol, tenemos:
Nodo raz: Nodo que no tiene padre. Este es el nodo que usaremos para acceder al rbol. En el ejemplo, ese nodo es A. Nodo hoja: Nodo que no tiene hijos. En el ejemplo, hay varios: K, M, O, etc. Nodo rama: Aunque esta definicin apenas la usaremos, estos son los nodos que no pertenecen a ninguna de las dos categoras anteriores. En el ejemplo B, G, D, J, etc.
A B C D E F G H I J K L M O N 4
Existen otros conceptos que definen las caractersticas del rbol, en relacin a su tamao:
Orden: Es el nmero potencial de hijos que puede tener cada elemento del rbol. De este modo, diremos que un rbol en el que cada nodo puede apuntar a otros dos, es de orden dos, si puede apuntar a tres, es de orden tres, etc. Grado: Es el nmero de hijos que tiene el elemento con ms hijos dentro del rbol. En el rbol de ejemplo, el grado es tres, ya que tanto A como D tienen tres hijos y no existen elementos con ms de tres hijos. Nivel: Se define para cada elemento del rbol como la distancia a la raz, medida en nodos. El nivel de la raz es cero, y el de sus hijos uno, as sucesivamente. En el ejemplo, el nodo D tiene nivel uno, el nodo G tiene nivel dos, el nodo N tiene nivel tres. Altura: La altura de un rbol se define como el nivel del nodo de mayor nivel. Como cada nodo de un rbol puede considerarse a su vez como la raz de un rbol, tambin podemos hablar de altura de ramas. El rbol de ejemplo, tiene altura tres, la rama B tiene altura dos, la rama G tiene altura uno, la H cero, etc.
1.2 Clasificacin de rboles.
Los tipos de rboles o clasificacin de rboles que podemos encontrar y usar son los siguientes:
1.2.1 rboles Binarios. Es una estructura de datos en la cual cada nodo siempre tiene un hijo izquierdo y un hijo derecho. No pueden tener ms de dos hijos (de ah el nombre "binario"). Si algn hijo tiene como referencia a null, es decir que no almacena ningn dato, entonces este es llamado un nodo externo. En el caso contrario el hijo es llamado un nodo interno. Usos comunes de los rboles binarios son los rboles binarios de bsqueda, los montculos binarios y Codificacin de Huffman.
Un rbol binario sencillo de tamao 9, 4 niveles y altura 3 (altura = mximo nivel - 1), con un nodo raz. cuyo valor es 2. 5
rbol binario de bsqueda auto-balanceable. Un rbol binario de bsqueda auto- balanceable o equilibrado es un rbol binario de bsqueda que intenta mantener su altura, o el nmero de niveles de nodos bajo la raz, tan pequeos como sea posible en todo momento, automticamente. Esto es importante, ya que muchas operaciones en un rbol de bsqueda binaria tardan un tiempo proporcional a la altura del rbol, y los rboles binarios de bsqueda ordinarios pueden tomar alturas muy grandes en situaciones normales, como cuando las claves son insertadas en orden. Mantener baja la altura se consigue habitualmente realizando transformaciones en el rbol, como la rotacin de rboles, en momentos clave.
rbol AVL.
El rbol AVL toma su nombre de las iniciales de los apellidos de sus inventores, Georgii Adelson-Velskii y Yevgeniy Landis. Lo dieron a conocer en la publicacin de un artculo en 1962, An algorithm for the organization of information (Un algoritmo para la organizacin de la informacin). Los rboles AVL estn siempre equilibrados de tal modo que para todos los nodos, la altura de la rama izquierda no difiere en ms de una unidad de la altura de la rama derecha o viceversa. Gracias a esta forma de equilibrio (o balanceo), la complejidad de una bsqueda en uno de estos rboles se mantiene siempre en orden de complejidad O(log n). El factor de equilibrio puede ser almacenado directamente en cada nodo o ser computado a partir de las alturas de los subrboles. Para conseguir esta propiedad de equilibrio, la insercin y el borrado de los nodos se ha de realizar de una forma especial. Si al realizar una operacin de insercin o borrado se rompe la condicin de equilibrio, hay que realizar una serie de rotaciones de los nodos. Las rotaciones internas en rboles binarios son operaciones internas comunes utilizadas para mantener el balance perfecto o casi perfecto del rbol binario. Un rbol balanceado permite operaciones en tiempo logartmico 6
Los rboles AVL ms profundos son los rboles de Fibonacci.
rbol rojo-negro. Un rbol rojo-negro es un tipo abstracto de datos. Concretamente, es un rbol binario de bsqueda equilibrado, una estructura de datos utilizada en informtica y ciencias de la computacin. La estructura original fue creada por Rudolf Bayer en 1972, que le dio el nombre de rboles-B binarios simtricos, pero tom su nombre moderno en un trabajo deLeo J. Guibas y Robert Sedgewick realizado en 1978. Es complejo, pero tiene un buen peor caso de tiempo de ejecucin para sus operaciones y es eficiente en la prctica. Puede buscar, insertar y borrar en un tiempo O(log n), donde n es el nmero de elementos del rbol. Sera ideal exponer la especificacin algebraica completa de este tipo abstracto de datos (TAD) escrita en algn lenguaje de especificacin de TADs, como podra ser Maude; sin embargo, la complejidad de la estructura hace que la especificacin sea bastante ilegible, y no aporta valor considerable al lector. Por tanto, su especificacin es expuesta a continuacin en lenguaje humano, esquemas e implementaciones en el lenguaje de programacin C.
Un ejemplo de rbol binario no equilibrado (no es AVL) Un ejemplo de rbol binario equilibrado (s es AVL) Un ejemplo de rbol rojo-negro 7
rbol AA. Un rbol AA es un tipo de rbol binario de bsqueda auto- balanceable utilizado para almacenar y recuperar informacin ordenada de manera eficiente. Los rboles AA reciben el nombre de su inventor, Arne Andersson. Los rboles AA son una variacin del rbol rojo-negro, que a su vez es una mejora del rbol binario de bsqueda. A diferencia de los rboles rojo-negro, los nodos rojos en un rbol AA slo pueden aadirse como un hijo derecho. En otras palabras, ningn nodo rojo puede ser un hijo izquierdo. De esta manera se simula un rbol 2-3 en lugar de un rbol 2-3-4, lo que simplifica las operaciones de mantenimiento. Los algoritmos de mantenimiento para un rbol rojo-negro necesitan considerar siete diferentes formas para balancear adecuadamente el rbol:
En un rbol AA, al cumplirse el estricto requisito de que slo los enlaces derechos pueden ser rojos, slo es necesario considerar dos formas:
1.2.2 rbol multicamino. Un rbol multicamino posee un grado g mayor a dos, donde cada nodo de informacin del rbol tiene un mximo de g hijos.
Sea un rbol de m-caminos A, es un rbol m-caminos si y solo si: A est vaco Cada nodo de A muestra la siguiente estructura: [nClaves,Enlace 0 ,Clave 1 ,...,Clave nClaves ,Enlace nClaves ] nClaves es el nmero de valores de clave de un nodo, pudiendo ser: 0 <= nClaves <= g-1 Clave i , son los valores de clave, pudiendo ser: 1 <= i <=nClaves Enlace i , son los enlaces a los subrboles de A, pudiendo ser: 0 <= i <= nClaves 8
Clave i < Clave i+1
Cada valor de clave en el subrbol Enlace i es menor que el valor de Clave i+1
Los subrboles Enlace i , donde 0 <= i <= nClaves, son tambin rboles m-caminos. Existen muchas aplicaciones en las que el volumen de la informacin es tal, que los datos no caben en la memoria principal y es necesario almacenarlos, organizados en archivos, en dispositivos de almacenamiento secundario. Esta organizacin de archivos debe ser suficientemente adecuada como para recuperar los datos del mismo en forma eficiente.
rbol B (rboles de bsqueda multicamino autobalanceados). B-rbol es un rbol de bsqueda que puede estar vaco o aquel cuyos nodos pueden tener varios hijos, existiendo una relacin de orden entre ellos, tal como muestra el dibujo. Un rbol-B de orden M (el mximo nmero de hijos que puede tener cada nodo) es un rbol que satisface las siguientes propiedades:
1. Cada nodo tiene como mximo M hijos. 2. Cada nodo (excepto raz) tiene como mnimo (M-1)/2 claves. 3. La raz tiene al menos 2 hijos si no es un nodo hoja. (segn M) 4. Todos los nodos hoja aparecen al mismo nivel. 5. Un nodo no hoja con k hijos contiene k-1 elementos almacenados. 6. Los hijos que cuelgan de la raz (r1, , rm) tienen que cumplir ciertas condiciones: 1. El primero tiene valor menor que r1. 2. El segundo tiene valor mayor que r1 y menor que r2, etc. 3. El ltimo hijo tiene valor mayor que rm.
rbol B+. Un rbol B+ es un tipo de estructura de datos de rbol, representa una coleccin de datos ordenados de manera que se permite una insercin y borrado eficientes de elementos. Es un ndice, multinivel, dinmico, con un lmite mximo y mnimo en 9
el nmero de claves por nodo. Un rbol B+ es una variacin de un rbol B. En un rbol B+, toda la informacin se guarda en las hojas. Los nodos internos slo contienen claves y punteros. Todas las hojas se encuentran en el mismo nivel, que corresponde al ms bajo. Los nodos hoja se encuentran unidos entre s como una lista enlazada para permitir bsqueda secuencial.
rbol B*. Un rbol-B* es una estructura de datos de rbol, una variante de rbol-B utilizado en los sistemas de ficheros HFS y Reiser4, que requiere que los nodos no raz estn por lo menos a 2/3 de ocupacin en lugar de 1/2. Para mantener esto los nodos, en lugar de generar inmediatamente un nodo cuando se llenan, comparten sus claves con el nodo adyacente. Cuando ambos estn llenos, entonces los dos nodos se transforman en tres. Tambin requiere que la clave ms a la izquierda no sea usada nunca. No se debe confundir un rbol-B* con un rbol-B+, en el que los nodos hoja del rbol estn conectados entre s a travs de una lista enlazada, aumentando el coste de insercin para mejorar la eficiencia en la bsqueda.
1.3 Operaciones bsicas sobre rboles binarios. Como en toda estructura de datos hay dos operaciones bsicas, insercin y eliminacin.
Insercin. El procedimiento de insercin en un rbol binario de bsqueda es muy sencillo, nicamente hay que tener cuidado de no romper la estructura ni el orden del rbol. Un rbol B+ simple (una variacin del rbol B) que enlaza los elementos 1 al 7 a valores de datos d 1 -d 7 . Note la lista enlazada (en rojo) que permite el recorrido de los elementos en orden. 10
Cuando se inserta un nuevo nodo en el rbol hay que tener en cuenta que cada nodo no puede tener ms de dos hijos, por esta razn si un nodo ya tiene 2 hijos, el nuevo nodo nunca se podr insertar como su hijo. Con esta restriccin nos aseguramos mantener la estructura del rbol, pero an nos falta mantener el orden.
Para localizar el lugar adecuado del rbol donde insertar el nuevo nodo se realizan comparaciones entre los nodos del rbol y el elemento a insertar. El primer nodo que se compara es la raz, si el nuevo nodo es menor que la raz, la bsqueda prosigue por el nodo izquierdo de ste. Si el nuevo nodo fuese mayor, la bsqueda seguira por el hijo derecho de la raz.
Este procedimiento es recursivo, y su condicin de parada es llegar a un nodo que no tenga hijo en la rama por la que la bsqueda debera seguir. En este caso el nuevo nodo se inserta en ese hueco, como su nuevo hijo.
Vamos a verlo con un ejemplo sobre el siguiente rbol de la derecha: Se quiere insertar el elemento 6.
Lo primero es comparar el nuevo elemento con la raz. Como 6 > 4, entonces la bsqueda prosigue por el lado derecho. Ahora el nuevo nodo se compara con el elemento 8. En este caso 6 < 8, por lo que hay que continuar la bsqueda por la rama izquierda. Como la rama izquierda de 8 no tiene ningn nodo, se cumple la condicin de parada de la recursividad y se inserta en ese lugar el nuevo nodo.
Borrar. El borrado en rboles binarios de bsqueda es otra operacin bastante sencilla excepto en un caso. Vamos a ir estudiando los distintos casos. Tras realizar la bsqueda del nodo a eliminar observamos que el nodo no tiene hijos. Este es el caso ms sencillo, nicamente habr que borrar el elemento y ya habremos concluido la operacin. Si tras realizar la bsqueda nos encontramos con que tiene un slo hijo. Este caso tambin es sencillo, para borrar el nodo deseado, hacemos 11
una especie de puente, el padre del nodo a borrar pasa a apuntar al hijo del nodo borrado.
Por ltimo, el caso ms complejo, si el nodo a borrar tiene dos hijos. En este caso se debe sustituir el nodo a borrar por mayor de los nodos menores del nodo borrado, o por el menor de los nodos mayores de dicho nodo. Una vez realizada esta sustitucin se borrar el nodo que sustituy al nodo eliminado (operacin sencilla ya que este nodo tendr un hijo a lo sumo).
Sobre el siguiente rbol queremos eliminar el elemento 6. Tenemos dos opciones para sustituirlo: - El menor de sus mayores: 7. - El mayor de sus menores: 4.
Vamos a sustituirlo por el 7 (por ejemplo). El rbol resultante sera el siguiente, tras eliminar tambin el elemento 7 de su ubicacin original.
12
Otras operaciones. En los rboles de bsqueda la operacin buscar es muy eficiente. El algoritmo compara el elemento a buscar con la raz, si es menor continua la bsqueda por la rama izquierda, si es mayor continua por la izquierda. Este procedimiento se realiza recursivamente hasta que se encuentra el nodo o hasta que se llega al final del rbol.
Otra operacin importante en el rbol es el recorrido del mismo. El recorrido se puede realizar de tres formas diferentes:
Preorden: Primero el nodo raz, luego el subrbol izquierdo y a continuacin el subrbol derecho. Inorden: Primero el subrbol izquierdo, luego la raz y a continuacin el subrbol derecho. Postorden: Primero el subrbol izquierdo, luego el subrbol derecho y a continuacin la raz.
1.3 Aplicaciones.
Las principales aplicaciones que se les dan a los rboles son:
Representacin de datos jerrquicos. Una base de datos jerrquica es un tipo de sistema de gestin de bases de datos que, como su nombre indica, almacena la informacin en una estructura jerrquica que enlaza los registros en forma de estructura de rbol (similar a un rbol visto al revs), en donde un nodo padre de informacin puede tener varios nodos hijo, y as sucesivamente. Esta relacin jerrquica no es estrictamente obligatoria, de manera que pueden establecerse relaciones entre nodos hermanos, y en este caso, la estructura en forma de rbol se convierte en una estructura en forma de grafo dirigido (esta variante se denomina Bases de datos de red). Un registro hijo contiene la direccin fsica en el medio de almacenamiento de su registro padre. Esto tiene una ventaja fundamental sobre las bases de datos relacionales: el rendimiento. El acceso de un registro a otro es prcticamente inmediato sin necesidad de consultar tablas de correspondencia. Las relaciones jerrquicas entre diferentes tipos de datos pueden hacer que sea muy sencillo responder a determinadas preguntas, pero muy difcil el contestar a otras. Ayuda para realizar bsquedas en conjuntos de datos.
13
1.4 rboles balaceados (AVL).
Un rbol AVL es un tipo especial de rbol binario ideado por los matemticos rusos Adelson-Velskii y Landis. Fue el primer rbol de bsqueda binario auto-balanceable que se ide.
Descripcin. El rbol AVL toma su nombre de las iniciales de los apellidos de sus inventores, Georgii Adelson-Velskii y Yevgeniy Landis. Lo dieron a conocer en la publicacin de un artculo en 1962, An algorithm for the organization of information (Un algoritmo para la organizacin de la informacin). Los rboles AVL estn siempre equilibrados de tal modo que para todos los nodos, la altura de la rama izquierda no difiere en ms de una unidad de la altura de la rama derecha o viceversa. Gracias a esta forma de equilibrio (o balanceo), la complejidad de una bsqueda en uno de estos rboles se mantiene siempre en orden de complejidad O(log n). El factor de equilibrio puede ser almacenado directamente en cada nodo o ser computado a partir de las alturas de los subrboles. Para conseguir esta propiedad de equilibrio, la insercin y el borrado de los nodos se han de realizar de una forma especial. Si al realizar una operacin de insercin o borrado se rompe la condicin de equilibrio, hay que realizar una serie de rotaciones de los nodos. Los rboles AVL ms profundos son los rboles de Fibonacci.
Definicin de la altura de un rbol. Sea un rbol binario de bsqueda y sean y sus subrboles, su altura H(T), es: si el rbol contiene solo la raz si contiene ms nodos Definicin de rbol AVL. Un rbol vaco es un rbol AVL Si es un rbol no vaco y y sus subrboles, entonces es AVL si y solo si: es AVL es AVL
14
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; Por definicin, para un rbol AVL, este valor debe ser -1, 0 1.
Si el factor de equilibrio de un nodo es: 0 -> el nodo est equilibrado y sus subrboles tienen exactamente la misma altura. 1 -> el nodo est equilibrado y su subrbol derecho es un nivel ms alto. -1 -> el nodo est equilibrado y su subrbol izquierdo es un nivel ms alto.
Si el factor de equilibrio es necesario reequilibrar.
Operaciones. Las operaciones bsicas de un rbol AVL implican generalmente el realizar los mismos algoritmos que seran realizados en un rbol binario de bsqueda desequilibrado, pero precedido o seguido por una o ms de las llamadas "rotaciones AVL".
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).
Rotacin 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.
op rotIzq: AVL{X} -> [AVL{X}] . eq rotIzq(arbolBin(R1, I, arbolBin(R2, I2, D2))) == arbolBin(R2, arbolBin(R1, I, I2), D2) .
Si la insercin se produce en el hijo derecho del hijo izquierdo del nodo desequilibrado (o viceversa) hay que realizar una doble rotacin.
16
Rotacin doble a la derecha.
La Rotacin doble a la Derecha son dos rotaciones simples, primero rotacin simple izquierda y luego rotacin simple derecha.
Rotacin doble a la izquierda. La Rotacin doble a la Izquierda son dos rotaciones simples, primero rotacin simple derecha y luego rotacin simple izquierda.
Insercin. La insercin en un rbol de AVL puede ser realizada insertando el valor dado en el rbol como si fuera un rbol de bsqueda binario desequilibrado y despus retrocediendo hacia la raz, rotando sobre cualquier nodo que pueda haberse desequilibrado durante la insercin.
Proceso de insercin: a. Buscar hasta encontrar la posicin de insercin o modificacin (proceso idntico a insercin en rbol binario de bsqueda) b. Insertar el nuevo nodo con factor de equilibrio equilibrado c. Desandar el camino de bsqueda, verificando el equilibrio de los nodos, y re-equilibrando si es necesario
17
18
19
Debido a que las rotaciones son una operacin que tienen complejidad constante y a que la altura est limitada a O (log(n)), el tiempo de ejecucin para la insercin es del orden O (log(n)).
Extraccin. El procedimiento de borrado es el mismo que en el caso de rbol binario de bsqueda. La diferencia se encuentra en el proceso de reequilibrado posterior. El problema de la extraccin puede resolverse en O (log n) pasos. Una extraccin trae consigo una disminucin de la altura de la rama donde se extrajo y tendr como efecto un cambio en el factor de equilibrio del nodo padre de la rama en cuestin, pudiendo necesitarse una rotacin. Esta disminucin de la altura y la correccin de los factores de equilibrio con sus posibles rotaciones asociadas pueden propagarse hasta la raz.
20
Borrar A, y la nueva raz ser M.
Borrado A, la raz es M. Aplicamos la rotacin a la izquierda.
21
El rbol resultante ha perdido altura.
En borrado pueden ser necesarias varias operaciones de restauracin del equilibrio, y hay que seguir comprobando hasta llegar a la raz.
Bsqueda. Ejemplo en Java:
22
23
CONCLUSIN
Luego de concluir el siguiente tema, debemos tener en cuenta que un rbol como estructura de datos nos permite almacenar una cantidad significativa de datos de forma ordenada. Un rbol se representa con un conjunto de nodos entrelazados entre s por medio de ramas, debemos tener en cuenta que el nodo base es nico, y se le denomina raz. En un rbol un padre puede tener varios hijos pero un hijo solo puede tener un padre. Desde la raz se puede llegar a cualquier nodo progresando por las ramas y atravesando los sucesivos niveles estableciendo as un camino. Los recorridos de un rbol se entienden por el tratamiento realizado para acceder a los diferentes nodos de un rbol. El recorrido puede afectar a la totalidad de los nodos del rbol, por eso debemos tener muy claro que al realizar un rbol debemos colocar nombres complejos que trate del algoritmo que estamos realizando, ya que al realizar los recorridos debemos saber dnde estamos ubicados en dicho rbol, y cuando se vaya haciendo ms extenso dicho algoritmo que hemos creado sea ms fcil de ubicarnos. Ya que si nos ubicamos mal en un nodo podemos crear un mal funcionamiento del algoritmo, borrar informacin equivocada o que ocurra un desbordamiento de datos.
24
Bibliografa Monografas. (s.f.). Recuperado el 07 de 10 de 2014, de http://www.monografias.com/trabajos92/arboles-binario/arboles-binario.shtml Wikipedia. (03 de Junio de 2013). Recuperado el 06 de 10 de 2014, de http://es.wikipedia.org/wiki/%C3%81rbol_(inform%C3%A1tica) Wikipedia. (04 de 08 de 2014). Recuperado el 10 de 10 de 2014, de http://es.wikipedia.org/wiki/%C3%81rbol_AVL