Sei sulla pagina 1di 21

rbol binario de bsqueda auto-balanceable

En ciencias de la computacin, 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. Tiempos para varias operaciones en trminos del nmero de nodos en el rbol n:
Operacin Bsqueda Insercin Eliminacin Iteracin en orden Tiempo en cota superior asinttica O(log n) O(log n) O(log n) O(n)

Para algunas implementaciones estos tiempos son el peor caso, mientras que para otras estn amortizados. Estructuras de datos populares que implementan este tipo de rbol:

rbol AVL rbol rojo-negro

rboles binarios balanceados de bsqueda. AVL.


El alto de un rbol es el largo de la trayectoria ms larga de una hoja hasta la raz. Adel'son-Vel'skii y Landis (1962) definieron rboles AVL en los cuales, para cada nodo, el alto del subrbol derecho difiere del alto del subrbol izquierdo a lo ms en uno. El desarrollo del algoritmo muestra la

necesidad de un anlisis exhaustivo de los diferentes casos que se presentan. Dicho anlisis facilita la posterior codificacin. 11.1 Anlisis de complejidad. Se define el factor de balance como el alto del subrbol derecho menos el alto del subrbol izquierdo. Entonces en un rbol AVL, todos los nodos cumplen la propiedad de tener valores del factor de balance iguales a: -1, 0, +1. Sea el mnimo nmero de nodos en un rbol AVL de altura h dada, que se encuentra en su peor caso de desbalance, si se agrega un nodo, tal que la nueva altura sea (h+1), dejan de ser AVL. Los siguientes diagramas ilustran dichos rboles, denominados de Fibonacci, y los factores de balance de sus nodos, para alturas 0, 1 y 2. Se muestran todos los casos, separados por un eje de simetra; a la derecha del eje se muestran los desbalanceados por la derecha; y a la izquierda los desbalanceados por la izquierda. Las imgenes en ambos lados del eje se obtienen como imgenes especulares de las del otro lado. Lo que se desea encontrar es la altura mxima h de todos los rboles balanceados de n nodos. Para resolver esto se da una altura h determinada y se intenta construir rboles balanceados AVL con el mnimo nmero de nodos, stos son los rboles de Fibonacci. hn2 Estructuras de Datos y Algoritmos .

Se cumple que: n2 = n1 + n0 + 1 Donde h(bst) es la altura de un rbol de bsqueda binario completamente balanceado: h(bst) = log(n+1)

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 de Leo 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.

Terminologa
Un rbol rojo-negro es un tipo especial de rbol binario usado en informtica para organizar informacin compuesta por datos comparables (como por ejemplo nmeros). En los rboles rojo-negro las hojas no son relevantes y no contienen datos. A la hora de implementarlo en un lenguaje de programacin, para ahorrar memoria, un nico nodo (nodocentinela) hace de nodo hoja para todas las ramas. As,todas las referencias de los nodos internos a las hojas van a parar al nodo centinela. En los rboles rojo-negro, como en todos los rboles binarios de bsqueda, es posible moverse ordenadamente a travs de los elementos de forma eficiente si hay forma de localizar el padre de cualquier nodo. El tiempo de desplazarse desde la raz hasta una hoja a travs de un rbol equilibrado que tiene la mnima altura posible es de O(log n). Propiedades Un rbol rojo-negro es un rbol binario de bsqueda en el que cada nodo tiene un atributo de color cuyo valor es o bien rojo o bien negro. Adems de los requisitos impuestos a los rboles binarios de bsqueda convencionales, se deben satisfacer los siguientes para tener un rbol rojo-negro vlido:
1. Todo nodo es o bien rojo o bien negro. 2. La raz es negra. 3. Todas las hojas son negras (las hojas son los hijos nulos).

4. Los hijos de todo nodo rojo son negros (tambin llamada "Propiedad del rojo"). 5. Cada camino simple desde un nodo a una hoja descendiente contiene el mismo nmero de nodos negros, ya sea contando siempre los nodos negros nulos, o bien no contndolos nunca (el resultado es equivalente). Tambin es llamada "Propiedad del camino", y al nmero de nodos negros de cada camino, que es constante para todos los caminos, se le denomina "Altura negra del rbol". 6. El camino ms largo desde la raz hasta una hoja no es ms largo que 2 veces el camino ms corto desde la raz del rbol a una hoja en dicho rbol. El resultado es que dicho rbol est aproximadamente equilibrado. Dado que las operaciones bsicas como insertar, borrar y encontrar valores tienen un peor tiempo de bsqueda proporcional a la altura del rbol, esta cota superior de la altura permite a los rboles rojo-negro ser eficientes en el peor caso, de forma contraria a lo que sucede en los rboles binarios de bsqueda. Para ver que estas propiedades garantizan lo dicho, basta ver que ningn camino puede tener 2 nodos rojos seguidos debido a la propiedad 4. El camino ms corto posible tiene todos sus nodos negros, y el ms largo alterna entre nodos rojos y negros. Como todos los caminos mximos tienen el mismo nmero de nodos negros, por la

propiedad 5, esto muestra que no hay ningn camino que pueda tener el doble de longitud que otro camino. En muchas presentaciones de estructuras arbreas de datos, es posible para un nodo tener solo un hijo y las hojas contienen informacin. Es posible presentar los rboles rojo-negro en este paradigma, pero cambian algunas de las propiedades y se complican los algoritmos. Por esta razn, este artculo utilizan hojas nulas, que no contienen informacin y simplemente sirven para indicar dnde el rbol acaba, como se mostr antes. Habitualmente estos nodos son omitidos en las representaciones, lo cual da como resultado un rbol que parece contradecir los principios expuestos antes, pero que realmente no los contradice. Como consecuencia de esto todos los nodos internos tienen dos hijos, aunque uno o ambos nodos podran ser una hoja nula. Otra explicacin que se da del rbol rojo-negro es la tratarlo como un rbol binario de bsqueda cuyas aristas, en lugar de nodos, son coloreadas de color rojo o negro, pero esto no produce ninguna diferencia. El color de cada nodo en la terminologa de este artculo corresponde al color de la arista que une el nodo a su padre, excepto la raz, que es siempre negra (por la propiedad 2) donde la correspondiente arista no existe.

Un ejemplo de rbol rojo-negro


Usos y ventajas

Los rboles rojo-negro ofrecen un peor caso con tiempo garantizado para la insercin, el borrado y la bsqueda. No es esto nicamente lo que los hace valiosos en aplicaciones sensibles al tiempo como las aplicaciones en tiempo real, sino que adems son apreciados para la construccin de bloques en otras estructuras de datos que garantizan un peor caso. Por ejemplo, muchas estructuras de datos usadas en geometra computacional pueden basarse en rboles rojo-negro. El rbol AVL es otro tipo de estructura con O(log n) tiempo de bsqueda, insercin y borrado. Est equilibrado de forma ms rgida que los rboles rojo-negro, lo que provoca que

la insercin y el borrado sean ms lentos pero la bsqueda y la devolucin del resultado de la misma ms veloz. Los rboles rojo-negro son particularmente valiosos en programacin funcional, donde son una de las estructuras de datos persistentes ms comnmente utilizadas en la construccin de arrays asociativos y conjuntos que pueden retener versiones previas tras mutaciones. La versin persistente del rbol rojo-negro requiere un espacio O(log n) para cada insercin o borrado, adems del tiempo. Los rboles rojo-negro son isomtricos a los rboles 2-3-4. En otras palabras, para cada rbol 2-3-4, existe un rbol correspondiente rojo-negro con los datos en el mismo orden. La insercin y el borrado en rboles 2-3-4 son tambin equivalentes a los cambios de colores y las rotaciones en los rboles rojo-negro. Esto los hace ser una herramienta til para la comprensin del funcionamiento de los rboles rojo-negro y por esto muchos textos introductorios sobre algoritmos presentan los rboles 2-3-4 justo antes que los rboles rojonegro, aunque frecuentemente no sean utilizados en la prctica.

rbol-B
En las ciencias de la computacin, los rboles-B B-rboles son estructuras de datos de rbol que se encuentran comnmente en las implementaciones de bases de datos y sistemas de archivos. Los rboles B mantienen los datos ordenados y las inserciones y eliminaciones se realizan en tiempo logartmico amortizado.

Ejemplo de rbol B. Definicin La idea tras los rboles-B es que los nodos internos deben tener un nmero variable de nodos hijo dentro de un rango predefinido. Cuando se inserta o se elimina un dato de la estructura, la cantidad de nodos hijo vara dentro de un nodo. Para que siga mantenindose el nmero de nodos dentro del rango predefinido, los nodos internos se juntan o se parten. Dado que se permite un rango variable de nodos hijo, los rboles-B no necesitan rebalancearse tan frecuentemente como los rboles binarios de bsqueda auto-balanceables, pero por otro lado pueden desperdiciar memoria, porque los nodos no permanecen totalmente ocupados. Los lmites superior e inferior en el nmero de nodos hijo son definidos para cada

implementacin en particular. Por ejemplo, en un rbol-B 2-3 (A menudo simplemente llamado rbol 2-3 ), cada nodo slo puede tener 2 3 nodos hijo. Un rbol-B se mantiene balanceado porque requiere que todos los nodos hoja se encuentren a la misma altura. Los rboles B tienen ventajas sustanciales sobre otras implementaciones cuando el tiempo de acceso a los nodos excede al tiempo de acceso entre nodos. Este caso se da usualmente cuando los nodos se encuentran en dispositivos de almacenamiento secundario como los discos rgidos. Al maximizar el nmero de nodos hijo de cada nodo interno, la altura del rbol decrece, las operaciones para balancearlo se reducen, y aumenta la eficiencia. Usualmente este valor se coloca de forma tal que cada nodo ocupe un bloque de disco, o un tamao anlogo en el dispositivo. Mientras que los rboles B 2-3 pueden ser tiles en la memoria principal, y adems ms fciles de explicar, si el tamao de los nodos se ajustan para caber en un bloque de disco, el resultado puede ser un rbol B 129-513. Los creadores del rbol B, Rudolf Bayer y Ed McCreight, no han explicado el significado de la letra B de su nombre. Se cree que la B es de balanceado, dado que todos los nodos hoja se mantienen al mismo nivel en el rbol. La B tambin puede referirse a Bayer, o a Boeing, porque sus creadores trabajaban en el Boeing Scientific Research Labs en ese entonces. Definicin breve 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 arbol-B de orden M (el mximo nmero de hijos que puede tener cada nodo) es un arbol que satisface las siguientes propiedades: 1. 2. 3. 4. 5. 6. Cada nodo tiene como mximo M hijos. Cada nodo (excepto raiz y hojas) tiene como mnimo M/2 hijos. La raiz tiene al menos 2 hijos si no es un nodo hoja. Todos los nodos hoja aparecen al mismo nivel,y no tienen hijos. Un nodo no hoja con k hijos contiene k-1 elementos almacenados. 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 mayor que rm .

Altura: El mejor y el peor caso En el mejor de los casos,la altura de un arbol-B es: logMn En el peor de los casos,la altura de un arbol-B es:

Donde M es el nmero mximo de hijos que puede tener un nodo. Estructura de los nodos Cada elemento de un nodo interno acta como un valor separador, que lo divide en subrboles. Por ejemplo, si un nodo interno tiene tres nodos hijo, debe tener dos valores separadores o elementos a1 y a2. Todos los valores del subrbol izquierdo deben ser menores a a1, todos los valores del subrbol del centro deben estar entre a1 y a2, y todos los valores del subrbol derecho deben ser mayores a a2. Los nodos internos de un rbol B, es decir los nodos que no son hoja, usualmente se representan como un conjunto ordenado de elementos y punteros a los hijos. Cada nodo interno contiene un mximo de U hijos y, con excepcin del nodo raz, un mnimo de L hijos. Para todos los nodos internos exceptuando la raz, el nmero de elementos es uno menos que el nmero de punteros a nodos. El nmero de elementos se encuentra entre L-1 y U-1. El nmero U debe ser 2L o 2L-1, es decir, cada nodo interno est por lo menos a medio llenar. Esta relacin entre U y L implica que dos nodos que estn a medio llenar pueden juntarse para formar un nodo legal, y un nodo lleno puede dividirse en dos nodos legales (si es que hay lugar para subir un elemento al nodo padre). Estas propiedades hacen posible que el rbol B se ajuste para preservar sus propiedades ante la insercin y eliminacin de elementos. Los nodos hoja tienen la misma restriccin sobre el nmero de elementos, pero no tienen hijos, y por tanto carecen de punteros. El nodo raz tiene lmite superior de nmero de hijos, pero no tiene lmite inferior. Por ejemplo, si hubiera menos de L-1 elementos en todo el rbol, la raz sera el nico nodo del rbol, y no tendra hijos. Un rbol B de altura n+1 puede contener U veces por elementos ms que un rbol B de profundidad n, pero el costo en la bsqueda, insercin y eliminacin crece con la altura del rbol. Como todo rbol balanceado, el crecimiento del costo es ms lento que el del nmero de elementos. Algunos rboles balanceados guardan valores slo en los nodos hoja, y por lo tanto sus nodos internos y nodos hoja son de diferente tipo. Los rboles B guardan valores en cada nodo, y pueden utilizar la misma estructura para todos los nodos. Sin embargo, como los nodos hoja no tienen hijos, una estructura especial para stos mejora el funcionamiento.

Bsqueda [editar]
La bsqueda es similar a la de los rboles binarios. Se empieza en la raz, y se recorre el rbol hacia abajo, escogiendo el sub-nodo de acuerdo a la posicin relativa del valor buscado respecto a los valores de cada nodo. Tpicamente se utiliza la bsqueda binaria para determinar esta posicin relativa.

Procedimiento [editar]

ejemplo2 insercin en rbol B 1. . Situarse en el nodo raz. 2. (*). Comprobar si contiene la clave a buscar. 1. . Encontrada fin de procedimiento . 2. . No encontrada: 1. Si es hoja no existe la clave. 2. En otro caso el nodo actual es el hijo que corresponde: 1. . La clave a buscar k < k1 :hijo izquierdo. 2. . La clave a buscar k > ki y k < ki+1 hijo iesimo. 3. . Volver a paso 2(*).

Insercin [editar]
Todas las inserciones se hacen en los nodos hoja.
1. Realizando una bsqueda en el rbol, se halla el nodo hoja en el cual debera ubicarse el nuevo elemento. 2. Si el nodo hoja tiene menos elementos que el mximo nmero de elementos legales, entonces hay lugar para uno ms. Inserte el nuevo elemento en el nodo, respetando el orden de los elementos. 3. De otra forma, el nodo debe ser dividido en dos nodos. La divisin se realiza de la siguiente manera: 1. Se escoge el valor medio entre los elementos del nodo y el nuevo elemento. 2. Los valores menores que el valor medio se colocan en el nuevo nodo izquierdo, y los valores mayores que el valor medio se colocan en el nuevo nodo derecho; el valor medio acta como valor separador. 3. El valor separador se debe colocar en el nodo padre, lo que puede provocar que el padre sea dividido en dos, y as sucesivamente.

Si las divisiones de nodos suben hasta la raz, se crea una nueva raz con un nico elemento como valor separador, y dos hijos. Es por esto por lo que la cota inferior del tamao de los nodos no se aplica a la raz. El mximo nmero de elementos por nodo es U-1. As que debe ser posible dividir el nmero mximo de elementos U-1 en dos nodos legales. Si este nmero fuera impar, entonces U=2L, y cada uno de los nuevos nodos tendran (U-2)/2 = L-1 elementos, y por lo tanto seran nodos legales. Si U-1 fuera par, U=2L-1, as que habra 2L-2 elementos en el nodo. La mitad de este nmero es L-1, que es el nmero mnimo de elementos permitidos por nodo. Un algoritmo mejorado admite una sola pasada por el rbol desde la raiz,hasta el nodo donde la insercin tenga lugar,dividiendo todos los nodos que estn llenos encontrados a su paso.Esto evita la necesidad de volver a cargar en memoria los nodos padres,que pueden ser caros si los nodos se encuentran en una memoria secundaria.Sin embargo,para usar este algoritmo mejorado, debemos ser capaces de enviar un elemento al nodo padre y dividir el resto U-2 elementos en 2 nodos legales,sin aadir un nuevo elemento.Esto requiere que U=2L en lugar de U=L-1,lo que explica por qu algunos libros de texto imponen este requisito en la definicion de rboles-B.

Eliminacin [editar]
La eliminacin de un elemento es directa si no se requiere correccin para garantizar sus propiedades. Hay dos estrategias populares para eliminar un nodo de un rbol B.

localizar y eliminar el elemento, y luego corregir, o hacer una nica pasada de arriba a abajo por el rbol, pero cada vez que se visita un nodo, reestructurar el rbol para que cuando se encuentre el elemento a ser borrado, pueda eliminarse sin necesidad de continuar reestructurando

Se pueden dar dos problemas al eliminar elementos: primero, el elemento puede ser un separador de un nodo interno. Segundo, puede suceder que al borrar el elemento nmero de elementos del nodo quede debajo de la cota mnima. Estos problemas se tratan a continuacin en orden.

Eliminacin en un nodo hoja [editar]


Archivo:Eliminarnodohoja-b.jpg teliminar clave 65 del nodo hoja

Busque el valor a eliminar. Si el valor se encuentra en un nodo hoja, se elimina directamente la clave, posiblemente dejndolo con muy pocos elementos; por lo que se requerirn cambios adicionales en el rbol.

eliminar clave 20 de un nodo interno

Eliminacin en un nodo interno [editar]


Cada elemento de un nodo interno acta como valor separador para dos subrboles, y cuando ese elemento es eliminado, pueden suceder dos casos. En el primero, tanto el hijo izquierdo

como el derecho tienen el nmero mnimo de elementos, L-1. Pueden entonces fundirse en un nico nodo con 2L-2 elementos, que es un nmero que no excede U-1 y por lo tanto es un nodo legal. A menos que se sepa que este rbol B en particular no tiene datos duplicados, tambin se debe eliminar el elemento en cuestin (recursivamente) del nuevo nodillo. En el segundo caso, uno de los dos nodos hijos tienen un nmero de elementos mayor que el mnimo. Entonces se debe hallar un nuevo separador para estos dos subrboles. Note que el mayor elemento del rbol izquierdo es el mayor elemento que es menor que el separador. De la misma forma, el menor elemento del subrbol derecho es el menor elemento que es mayor que el separador. Ambos elementos se encuentran en nodos hoja, y cualquiera de los dos puede ser el nuevo separador.

Si el valor se encuentra en un nodo interno, escoja un nuevo separador (puede ser el mayor elemento del subrbol izquierdo o el menor elemento del subrbol derecho), elimnelo del nodo hoja en que se encuentra, y reemplace el elemento a eliminar por el nuevo separador. Como se ha eliminado un elemento de un nodo hoja, se debe tratar este caso de manera equivalente.

Rebalanceo despus de la eliminacin [editar]


Si al eliminar un elemento de un nodo hoja el nodo se ha quedado con menos elementos que el mnimo permitido, algunos elementos se deben redistribuir. En algunos casos el cambio lleva la deficiencia al nodo padre, y la redistribucin se debe aplicar iterativamente hacia arriba del rbol, quiz incluso hasta a la raz. Dado que la cota mnima en el nmero de elementos no se aplica a la raz, el problema desaparece cuando llega a sta. La estrategia consiste en hallar un hermano para el nodo deficiente que tenga ms del mnimo nmero de elementos y redistribuir los elementos entre los hermanos para que todos tengan ms del mnimo. Esto tambin cambia los separadores del nodo padre.

Si el nodo hermano inmediato de la derecha del nodo deficiente tiene ms del mnimo nmero de elementos, escoja el valor medio entre el separador y ambos hermanos como nuevo separador y colquelo en el padre. Redistribuya los elementos restantes en los nodos hijo derecho e izquierdo. Redistribuya los subrboles de los dos nodos . Los subrboles son trasplantados por completo, y no se alteran si se mueven a un otro nodo padre, y esto puede hacerse mientras los elementos se redistribuyen. Si el nodo hemano inmediato de la derecha del nodo deficiente tiene el mnimo nmero de elementos, examine el nodo hermano inmediato de la izquierda. Si los dos nodos hemanos inmediatos tienen el mnimo nmero de elementos, cree un nuevo nodo con todos los elementos del nodo deficiente, todos los elementos de uno de sus hermanos, colocando el separador del padre entre los elementos de los dos nodos hermanos fundidos.

Elimine el separador del padre, y reemplace los dos hijos que separaba por el nuevo nodo fundido. Si esa accin deja al nmero de elementos del padre por debajo del mnimo, repita estos pasos en el nuevo nodo deficiente, a menos que sea la raz, ya que no tiene cota mnima en el nmero de elementos.

rbol 2-3
En las ciencias de la computacin, los rboles-2-3-4 son estructuras de datos de rbol que se encuentran comnmente en las implementaciones de bases de datos y sistemas de archivos. Los rboles 2-3-4 mantienen los datos ordenados y las inserciones y eliminaciones se realizan en tiempo logartmico amortizado. Definicin Son un tipo de rbol balanceado por altura (height balanced). Se define como un rbol en dnde todos los nodos no-terminales tienen 2 3 descendientes y todos los nodos hoja tienen la misma longitud (path length) o distancia desde la raz. Fueran introducidos con el objeto de mejorar el tiempo de acceso en estructuras de datos manejadas en memoria secundaria, en las cuales el nmero de consultas a un registro influye de manera determinante en el tiempo de respuesta de la operacin. La estructura de rbol 2-3 exige que el crecimiento no se haga a nivel de las hojas (aunque la insercin sigue siendo en las hojas), sino q nivel de la raz, ya que todas las hojas se deben mantener siempre en el mismo nivel. El proceso global de insercin comienza por localizar la hoja en la cual se debe agregar el elemento. Propiedades Un rbol 2-3 permite que un nodo tenga dos o tres hijos. Esta caracterstica le permite conservar el balanceo tras insertar o borrar elementos, por lo que el algoritmo de bsqueda es casi tan rpido como en un rbol de bsqueda de altura mnima. Por otro lado, es mucho ms fcil de mantenerlo. En un rbol 2-3, los nodos internos han de tener 2 3 hijos y todas las hojas han de estar al mismo nivel. De forma recursiva se pueden definir como: A es un rbol 2-3 de altura h si:

A es un rbol vaco (un rbol 2-3 de altura 0), o A es de la forma (r, I, D), donde r es un nodo y I y D son rboles 2-3 de altura h 1, o A es de la forma (r, I, C, D), donde r es un nodo y I, C y D son rboles 2-3 de altura h-1.

Para usar estos rboles de forma eficiente en las bsquedas, hay que introducir un orden entre los elementos por lo que un rbol A es un rbol 2-3 de bsqueda de altura h si:

Todos los elementos de I son menores que r y todos los elementos de D son mayores que r. A es de la forma (r1, r2,I, C, D), donde r1 _ r2, I, Ac y D son rboles 2-3 de bsqueda de altura h-1 y todos los elementos de I son menores que r1, todos los elementos de C son mayores que r1 y menores que r2 y todos los elementos de D son mayores que r2.

Esta definicin implica que el nmero de hijos de un nodo es siempre uno ms que el nmero de elementos que contiene ese nodo. En el caso de las hojas se permiten uno o dos elementos en el nodo. Desde ahora nos referiremos a los rboles 2-3 de bsqueda simplemente como rboles 2-3.

La especificacin del tipo ARBOL23 es muy similar a la de otros rboles con una diferencia que es la definicin de tres operaciones generadoras en lugar de dos. arbolVaco es la operacin que genera un rbol sin elementos, como en los otros tipos y hay una operacin, consArbol, que genera un rbol 2-3 cuya raz tiene un solo elemento y dos hijos y otra, cons3Arbol, que genera un rbol 2-3 cuya raz tiene dos elementos y tres hijos. Estas dos ltimas operaciones son los generadores que se mantienen ocultos al usuario.

rbol binario
rbol binario (desambiguacin). En ciencias de la computacin, un rbol binario es una estructura de datos en la cual cada nodo:

No tiene hijos (hoja). Tiene un hijo izquierdo y un hijo derecho. Tiene un hijo izquierdo. Tiene un hijo derecho.

Usos comunes de los rboles binarios son los rboles binarios de bsqueda, los montculos binarios y Codificacin de Huffman.

Definicin de teora de grafos

En teora de grafos, se usa la siguiente definicin: Un rbol binario es un grafo conexo, acclico y no dirigido tal que el grado de cada vrtice no es mayor a 3. De esta forma slo existe un camino entre un par de nodos. Un rbol binario con enraizado es como un grafo que tiene uno de sus vrtices, llamado raz, de grado no mayor a 2. Con la raz escogida, cada vrtice tendr un nico padre, y nunca ms de dos hijos. Si reusamos el requerimiento de la conectividad, permitiendo mltiples componentes conectados en el grafo, llamaremos a esta ltima estructura un bosque.

Tipos de rboles binarios


Un rbol binario es un rbol con raz en el que cada nodo tiene como mximo dos hijos. Un rbol binario lleno es un rbol en el que cada nodo tiene cero o dos hijos. Un rbol binario perfecto es un rbol binario lleno en el que todas las hojas (vrtices con cero hijos) estn a la misma profundidad (distancia desde la raz, tambin llamada altura) A veces un rbol binario perfecto es denominado rbol binario completo. Otros definen un rbol binario completo como un rbol binario lleno en el que todas las hojas estn a profundidad n o n-1, para alguna n.

Un rbol binario es un rbol en el que ningn nodo puede tener ms de dos subrboles. En un rbol binario cada nodo puede tener cero, uno o dos hijos (subrboles). Se conoce el nodo de la izquierda como hijo izquierdo y el nodo de la derecha como hijo derecho.

Un rbol binario sencillo de tamao 9 y altura 3, con un nodo raz cuyo valor es 2

Recorridos en profundidad
el mtodo de este recorrido es tratar de encontrar de la cabecera a la raz en nodo de unidad binaria

Recorrido en preorden
En este tipo de recorrido se realiza cierta accin (quizs simplemente imprimir por pantalla el valor de la clave de ese nodo) sobre el nodo actual y

posteriormente se trata el subrbol izquierdo y cuando se haya concluido, el subrbol derecho. En el rbol de la figura el recorrido en preorden sera: 2, 7, 2, 6, 5, 11, 5, 9 y 4.

Recorrido en postorden
En este caso se trata primero el subrbol izquierdo, despus el derecho y por ltimo el nodo actual. En el rbol de la figura el recorrido en postorden sera: 2, 5, 11, 6, 7, 4, 9, 5 y 2.

Recorrido en inorden
En este caso se trata primero el subrbol izquierdo, despus el nodo actual y por ltimo el subrbol derecho. En un ABB este recorrido dara los valores de clave ordenados de menor a mayor. En el rbol de la figura el recorrido en inorden sera: 2, 7, 5, 6, 11, 2, 5, 4 y 9.

Recorridos en amplitud (o por niveles) [editar]


En este caso el recorrido se realiza en orden por los distintos niveles del rbol. As, se comenzara tratando el nivel 1, que slo contiene el nodo raz, seguidamente el nivel 2, el 3 y as sucesivamente. En el rbol de la figura el recorrido en amplitud sera: 2, 7, 5, 2, 6, 9, 5, 11 y 4. Al contrario que en los mtodos de recorrido en profundidad, el recorrido por niveles no es de naturaleza recursiva. Por ello, se debe utilizar una cola para recordar los subrboles izquierdos y derecho de cada nodo.

Mtodos para almacenar rboles binarios


Los rboles binarios pueden ser construidos a partir de lenguajes de programacin de varias formas. En un lenguaje con registros y referencias, los rboles binarios son construidos tpicamente con una estructura de nodos y punteros en la cual se almacenan datos, cada uno de estos nodos tiene una referencia o puntero a un nodo izquierdo y a un nodo derecho denominados hijos. En ocasiones, tambin contiene un puntero a un nico nodo. Si un nodo tiene menos de dos hijos, algunos de los punteros de los hijos pueden ser definidos como nulos para indicar que no dispone de dicho nodo. En la figura adjunta se puede observar la estructura de dicha implementacin.

Los rboles binarios tambin pueden ser almacenados como una estructura de datos implcita en arreglos, y si el rbol es un rbol binario completo, este mtodo no desaprovecha el espacio en memoria. Tomaremos como notacin la siguiente: si un nodo tiene un ndice i, sus hijos se encuentran en ndices 2i + 1 y 2i + 2, mientras que sus padres (si los tiene) se encuentra en el ndice (partiendo de que la raz tenga ndice cero). Este mtodo tiene como ventajas el tener almacenados los datos de forma ms compacta y por tener una forma ms rpida y eficiente de localizar los datos en particular durante un preoden transversal. Sin embargo, desperdicia mucho espacio en memoria.

Codificacin de rboles n-arios como rboles binarios


Hay un mapeo uno a uno entre los rboles generales y rboles binarios, el cual en particular es usado en Lisp para representar rboles generales como rboles binarios. Cada nodo N ordenado en el rbol corresponde a un nodo N 'en el rbol binario; el hijo de la izquierda de N es el nodo correspondiente al primer hijo de N, y el hijo derecho de N' es el nodo correspondiente al siguiente hermano de N, es decir, el prximo nodo en orden entre los hijos de los padres de N. Esta representacin como rbol binario de un rbol general, se conoce a veces como un rbol binario primer hijo/siguiente hermano, o un rbol doblemente encadenado. Una manera de pensar acerca de esto es que los hijos de cada nodo estn en una lista enlazada, encadenados junto con el campo derecho, y el nodo slo tiene un puntero al comienzo o la cabeza de esta lista, a travs de su campo izquierdo.

Por ejemplo, en el rbol de la izquierda, la A tiene 6 hijos (B, C, D, E, F, G). Puede ser convertido en el rbol binario de la derecha. Un ejemplo de transformar el rbol n-ario a un rbol binario Cmo pasar de rboles n-arios a rboles FLOFO.

El rbol binario puede ser pensado como el rbol original inclinado hacia los lados, con los bordes negros izquierdos representando el primer hijo y los azules representado los siguientes hermanos. Las hojas del rbol de la izquierda seran escritas en Lisp como:
(((M N) H I) C D ((O) (P)) F (L))

Que se ejecutar en la memoria como el rbol binario de la derecha, sin ningn tipo de letras en aquellos nodos que tienen un hijo izquierdo.

Algoritmo de Huffman
El algoritmo de Huffman es un algoritmo para la construccin de cdigos de Huffman, desarrollado por David A. Huffman en 1952 y descrito en A Method for the Construction of Minimum-Redundancy Codes.1 Este algoritmo toma un alfabeto de n smbolos, junto con sus frecuencias de aparicin asociadas, y produce un cdigo de Huffman para ese alfabeto y esas frecuencias.

Descripcin
El algoritmo consiste en la creacin de un rbol binario que tiene cada uno de los smbolos por hoja, y construido de tal forma que siguindolo desde la raz a cada una de sus hojas se obtiene el cdigo Huffman asociado.

1. Se crean varios rboles, uno por cada uno de los smbolos del alfabeto, consistiendo cada uno de los rboles en un nodo sin hijos, y etiquetado cada uno con su smbolo asociado y su frecuencia de aparicin. 2. Se toman los dos rboles de menor frecuencia, y se unen creando un nuevo rbol. La etiqueta de la raz ser la suma de las frecuencias de las races de los dos rboles que se unen, y cada uno de estos rboles ser un hijo del nuevo rbol. Tambin se etiquetan las dos ramas del nuevo rbol: con un 0 la de la izquierda, y con un 1 la de la derecha. 3. Se repite el paso 2 hasta que slo quede un rbol. Con este rbol se puede conocer el cdigo asociado a un smbolo, as como obtener el smbolo asociado a un determinado cdigo. Para obtener el cdigo asociado a un smbolo se debe proceder del siguiente modo: 1. 2. 3. 4. Comenzar con un cdigo vaco Iniciar el recorrido del rbol en la hoja asociada al smbolo Comenzar un recorrido del rbol hacia arriba Cada vez que se suba un nivel, aadir al cdigo la etiqueta de la rama que se ha recorrido 5. Tras llegar a la raz, invertir el cdigo 6. El resultado es el cdigo Huffman deseado Para obtener un smbolo a partir de un cdigo se debe hacer as: 1. 2. 3. 4. Comenzar el recorrido del rbol en la raz de ste Extraer el primer smbolo del cdigo a descodificar Descender por la rama etiquetada con ese smbolo Volver al paso 2 hasta que se llegue a una hoja, que ser el smbolo asociado al cdigo

En la prctica, casi siempre se utiliza el rbol para obtener todos los cdigos de una sola vez; luego se guardan en tablas y se descarta el rbol.

Ejemplo de uso
La tabla describe el alfabeto a codificar, junto con las frecuencias de sus smbolos. En el grfico se muestra el rbol construido a partir de este alfabeto siguiendo el algoritmo descrito. Smbolo Frecuencia A 0,15

B C D E F G

0,30 0,20 0,05 0,15 0,05 0,10

Se puede ver con facilidad cul es el cdigo del smbolo E: subiendo por el rbol se recorren ramas etiquetadas con 1, 1 y 0; por lo tanto, el cdigo es 011. Para obtener el cdigo de D se recorren las ramas 0, 1, 1 y 1, por lo que el cdigo es 1110. La operacin inversa tambin es fcil de realizar: dado el cdigo 10 se recorren desde la raz las ramas 1 y 0, obtenindose el smbolo C. Para descodificar 010 se recorren las ramas 0, 1 y 0, obtenindose el smbolo A.

rbol para construir el cdigo Huffman del ejemplo

Limitaciones

Para poder utilizar el algoritmo de Huffman es necesario conocer de antemano las frecuencias de aparicin de cada smbolo, y su eficiencia depende de lo prximas a las frecuencias reales que sean las estimadas. Algunas implementaciones del algoritmo de Huffman son adaptativas, actualizando las frecuencias de cada smbolo conforme recorre el texto. La eficiencia de la codificacin de Huffman tambin depende del balance que exista entre los hijos de cada nodo del rbol, siendo ms eficiente conforme menor sea la diferencia de frecuencias entre los dos hijos de cada nodo. Ejemplos:

La codificacin binaria es un caso particular de la codificacin de Huffman que ocurre cuando todos los smbolos del alfabeto tienen la misma frecuencia. Se tiene pues que la codificacin binaria es la ms eficiente para cualquier nmero de smbolos equiprobables. El algoritmo de Huffman aplicado sobre un alfabeto de dos smbolos asignar siempre un 1 al primero y un 0 al segundo, independientemente de la frecuencia de aparicin de dichos smbolos. En este caso nunca se realiza compresin de los datos, mientras que otros algoritmos s podran conseguirlo.

Una manera de resolver este problema consiste en agrupar los smbolos en palabras antes de ejecutar el algoritmo. Por ejemplo, si se tiene la cadena de longitud 64
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB

El algoritmo de Huffman aplicado nicamente a los smbolos devuelve el cdigo:


1111111111111111111111111111111111111111111111111111111111111110

Tambin de longitud 64. Sin embargo, si antes de utilizar el algoritmo, se agrupan los smbolos en las palabras "AA", "AB" y "B" (que se codifican como 1, 01 y 00), el algoritmo devuelve la siguiente cadena:
111111111111111111111111111111101

que tiene longitud 32, la mitad que si no se hubiera agrupado. Si observa el rbol de Huffman, se puede comprobar que la diferencia de frecuencias entre las ramas del rbol es menor que en el caso anterior.

Variaciones del algoritmo Cdigos Huffman n-arios


Es posible crear cdigos de Huffman ternarios, cuaternarios, y, en general, n-arios. Para ello slo es necesario realizar dos modificaciones al algoritmo:

1. Los rboles a crear tendrn tantos hijos como smbolos posibles puedan aparecer en los cdigos Huffman. Por ejemplo, si es ternario se crearn rboles con tres hijos; si es cuaternario, con cuatro. 2. Si se expresa como s el nmero de smbolos en el alfabeto a codificar, y n el nmero de smbolos que aparecen en el cdigo Huffman, entonces s-1 debe ser mltiplo de n1. Es decir, para un cdigo ternario, s debe valer 3, 5, 7, etc. Si esta condicin no se cumple, entonces se deben aadir smbolos "nulos" con frecuencia 0, que servirn slo como relleno a la hora de construir el rbol.