Árboles

21
 Árbol binario de búsqueda auto-balanceable En ciencias de la computación, un árbol binario de búsqueda auto-balanceable o equilibrado es un árbol binario de búsqueda que intenta mantener su altura, o el número de niveles de nodos bajo la raíz, tan pequeños como sea posible en todo momento, automáticamente. Esto es importante, ya que muchas operaciones en un árbol de búsqueda  binaria tardan un tiempo proporcional a la altura del árbol, y los árboles binarios de búsqueda 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 rotación de árboles, en momentos clave. Tiempos para varias operaciones en términos del número de nodos en el árbol n: Operación Tiempo en cota superior asintótica Búsqueda O(log n) Inserción O(log n) El iminacn O(log n) Itera ción en o rden O( n) Para algunas implementaciones estos tiempos son el peor caso, mientras que para otras están amortizados. Estructuras de datos populares que implementan este tipo de árbol: Árbol AVL Árbol rojo-negro  Árboles binarios balanceados de búsqueda. AVL. El alto de un árbol es el largo de la trayectoria más larga de una hoja hasta la raíz. Adel'son-Vel' skii y Landis (1962) definieron árboles AVL en los cuales, para cada nodo, el alto del subárbol derecho difiere del alto del subárbol izquierdo a lo más en uno. El desarrollo del algoritmo muestra la

Transcript of Árboles

Page 1: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 1/21

Árbol binario de búsqueda auto-balanceable

En ciencias de la computación, un árbol binario de búsqueda auto-balanceable oequilibrado es un árbol binario de búsqueda que intenta mantener su altura, o el número de

niveles de nodos bajo la raíz, tan pequeños como sea posible en todo momento,automáticamente. Esto es importante, ya que muchas operaciones en un árbol de búsqueda binaria tardan un tiempo proporcional a la altura del árbol, y los árboles binarios de búsquedaordinarios pueden tomar alturas muy grandes en situaciones normales, como cuando lasclaves son insertadas en orden. Mantener baja la altura se consigue habitualmente realizandotransformaciones en el árbol, como la rotación de árboles, en momentos clave.

Tiempos para varias operaciones en términos del número de nodos en el árbol n:

Operación Tiempo en cota superior asintótica

Búsqueda O(log n)

Inserción O(log n)

Eliminación O(log n)

Iteración en orden O(n)

Para algunas implementaciones estos tiempos son el peor caso, mientras que para otras estánamortizados.

Estructuras de datos populares que implementan este tipo de árbol:

• Árbol AVL • Árbol rojo-negro 

Árboles binarios balanceados de búsqueda.AVL.El alto de un árbol es el largo de la trayectoria más larga de una hoja hasta la raíz. Adel'son-Vel'skiiy Landis (1962) definieron árboles AVL en los cuales, para cada nodo, el alto del subárbol derechodifiere del alto del subárbol izquierdo a lo más en uno. El desarrollo del algoritmo muestra la

Page 2: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 2/21

necesidad de un análisis exhaustivo de los diferentes casos que se presentan. Dicho análisis facilitala posterior codificación.11.1 Análisis de complejidad.Se define el factor de balance como el alto del subárbol derecho menos el alto del subárbolizquierdo. Entonces en un árbol AVL, todos los nodos cumplen la propiedad de tener valores delfactor de balance iguales a: -1, 0, ó +1. Sea el mínimo número 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 alturasea (h+1), dejan de ser AVL. Los siguientes diagramas ilustran dichos árboles, denominados deFibonacci, y los factores de balance de sus nodos, para alturas 0, 1 y 2. Se muestran todos los casos,separados por un eje de simetría; a la derecha del eje se muestran los desbalanceados por la derecha;y a la izquierda los desbalanceados por la izquierda. Las imágenes en ambos lados del eje seobtienen como imágenes especulares de las del otro lado. Lo que se desea encontrar es la alturamáxima h de todos los árboles balanceados de n nodos. Para resolver esto se da una altura hdeterminada y se intenta construir árboles balanceados AVL con el mínimo número de nodos, éstosson 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 búsqueda binario completamente

balanceado:

h(bst ) = log(n+1)

Árbol rojo-negroUn árbol rojo negro es un tipo abstracto de datos, concretamente es un árbol binario de búsqueda equilibrado, una estructura de datos utilizada en informática y ciencias de lacomputación. La estructura original fue creada por Rudolf Bayer en 1972, que le dio elnombre de “árboles-B binarios simétricos”, pero tomó su nombre moderno en un trabajo deLeo J. Guibas y Robert Sedgewick realizado en 1978. Es complejo, pero tiene un buen peor 

Page 3: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 3/21

caso de tiempo de ejecución para sus operaciones y es eficiente en la práctica. Puede buscar,insertar y borrar en un tiempo O(log n), donde n es el número de elementos del árbol.

Terminología

Un árbol rojo-negro es un tipo especial de árbol binario usado en informática para organizar información compuesta por datos comparables (como por ejemplo números).

En los árboles rojo-negro las hojas no son relevantes y no contienen datos. A la hora deimplementarlo en un lenguaje de programación, para ahorrar memoria, un único nodo (nodo-centinela) hace de nodo hoja para todas las ramas. Así,todas las referencias de los nodosinternos a las hojas van a parar al nodo centinela.

En los árboles rojo-negro, como en todos los árboles binarios de búsqueda, es posiblemoverse ordenadamente a través de los elementos de forma eficiente si hay forma delocalizar el padre de cualquier nodo. El tiempo de desplazarse desde la raíz hasta una hoja a

través de un árbol equilibrado que tiene la mínima altura posible es de O(log n).

Propiedades

Un árbol rojo-negro es un árbol binario de búsqueda en el que cada nodo tiene un atributo decolor cuyo valor es o bien rojo o bien negro. Además de los requisitos impuestos a losárboles binarios de búsqueda convencionales, se deben satisfacer los siguientes para tener unárbol rojo-negro válido:

1. Todo nodo es o bien rojo o bien negro.2. La raíz es negra.

3. Todas las hojas son negras (las hojas son los hijos nulos).4. Los hijos de todo nodo rojo son negros (también llamada "Propiedad del rojo").5. Cada camino simple desde un nodo a una hoja descendiente contiene el mismo

número de nodos negros, ya sea contando siempre los nodos negros nulos, o bien nocontándolos nunca (el resultado es equivalente). También es llamada "Propiedad delcamino", y al número de nodos negros de cada camino, que es constante para todoslos caminos, se le denomina "Altura negra del árbol".

6. El camino más largo desde la raíz hasta una hoja no es más largo que 2 veces elcamino más corto desde la raíz del árbol a una hoja en dicho árbol. El resultado esque dicho árbol está aproximadamente equilibrado.

Dado que las operaciones básicas como insertar, borrar y encontrar valores tienen un peor tiempo de búsqueda proporcional a la altura del árbol, esta cota superior de la altura permite alos árboles rojo-negro ser eficientes en el peor caso, de forma contraria a lo que sucede en losárboles binarios de búsqueda. Para ver que estas propiedades garantizan lo dicho, basta ver que ningún camino puede tener 2 nodos rojos seguidos debido a la propiedad 4. El caminomás corto posible tiene todos sus nodos negros, y el más largo alterna entre nodos rojos ynegros. Como todos los caminos máximos tienen el mismo número de nodos negros, por la

Page 4: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 4/21

 propiedad 5, esto muestra que no hay ningún camino que pueda tener el doble de longitudque otro camino.

En muchas presentaciones de estructuras arbóreas de datos, es posible para un nodo tener solo un hijo y las hojas contienen información. Es posible presentar los árboles rojo-negro en

este paradigma, pero cambian algunas de las propiedades y se complican los algoritmos. Por esta razón, este artículo utilizan “hojas nulas”, que no contienen información y simplementesirven para indicar dónde el árbol acaba, como se mostró antes. Habitualmente estos nodosson omitidos en las representaciones, lo cual da como resultado un árbol que parececontradecir los principios expuestos antes, pero que realmente no los contradice. Comoconsecuencia de esto todos los nodos internos tienen dos hijos, aunque uno o ambos nodos podrían ser una hoja nula.

Otra explicación que se da del árbol rojo-negro es la tratarlo como un árbol binario de búsqueda 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 terminología de este artículo

corresponde al color de la arista que une el nodo a su padre, excepto la raíz, que es siemprenegra (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 inserción, el

 borrado y la búsqueda. No es esto únicamente lo que los hace valiosos en aplicacionessensibles al tiempo como las aplicaciones en tiempo real, sino que además son apreciados para la construcción de bloques en otras estructuras de datos que garantizan un peor caso. Por ejemplo, muchas estructuras de datos usadas en geometría computacional pueden basarse enárboles rojo-negro.

El árbol AVL es otro tipo de estructura con O(log n) tiempo de búsqueda, inserción y borrado. Está equilibrado de forma más rígida que los árboles rojo-negro, lo que provoca que

Page 5: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 5/21

la inserción y el borrado sean más lentos pero la búsqueda y la devolución del resultado de lamisma más veloz.

Los árboles rojo-negro son particularmente valiosos en programación funcional, donde sonuna de las estructuras de datos persistentes más comúnmente utilizadas en la construcción de

arrays asociativos y conjuntos que pueden retener versiones previas tras mutaciones. Laversión persistente del árbol rojo-negro requiere un espacio O(log n) para cada inserción o borrado, además del tiempo.

Los árboles rojo-negro son isométricos a los árboles 2-3-4. En otras palabras, para cada árbol2-3-4, existe un árbol correspondiente rojo-negro con los datos en el mismo orden. Lainserción y el borrado en árboles 2-3-4 son también equivalentes a los cambios de colores ylas rotaciones en los árboles rojo-negro. Esto los hace ser una herramienta útil para lacomprensión del funcionamiento de los árboles rojo-negro y por esto muchos textosintroductorios sobre algoritmos presentan los árboles 2-3-4 justo antes que los árboles rojo-negro, aunque frecuentemente no sean utilizados en la práctica.

Árbol-B

En las ciencias de la computación, los árboles-B ó B-árboles son estructuras de datos deárbol que se encuentran comúnmente en las implementaciones de  bases de datos y sistemasde archivos. Los árboles B mantienen los datos ordenados y las inserciones y eliminacionesse realizan en tiempo logarítmico amortizado.

Ejemplo de árbol B.

Definición

La idea tras los árboles-B es que los nodos internos deben tener un número 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 varía dentro de un nodo. Para que siga manteniéndose el número denodos 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 tanfrecuentemente como los árboles binarios de búsqueda auto-balanceables, pero por otro lado pueden desperdiciar memoria, porque los nodos no permanecen totalmente ocupados. Loslímites superior e inferior en el número de nodos hijo son definidos para cada

Page 6: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 6/21

implementación en particular. Por ejemplo, en un árbol-B 2-3 (A menudo simplementellamado árbol 2-3 ), cada nodo sólo puede tener 2 ó 3 nodos hijo.

Un árbol-B se mantiene balanceado porque requiere que todos los nodos hoja se encuentren ala misma altura.

Los árboles B tienen ventajas sustanciales sobre otras implementaciones cuando el tiempo deacceso a los nodos excede al tiempo de acceso entre nodos. Este caso se da usualmentecuando los nodos se encuentran en dispositivos de almacenamiento secundario como losdiscos rígidos. Al maximizar el número 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 untamaño análogo en el dispositivo. Mientras que los árboles B 2-3 pueden ser útiles en lamemoria principal, y además más fáciles de explicar, si el tamaño 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 dela letra B de su nombre. Se cree que la B es de balanceado, dado que todos los nodos hoja semantienen al mismo nivel en el árbol. La B también puede referirse a Bayer , o a Boeing, porque sus creadores trabajaban en el Boeing Scientific Research Labs en ese entonces.

Definición breve

B-árbol es un árbol de búsqueda que puede estar vacío o aquel cuyos nodos pueden tener varios hijos, existiendo una relación de orden entre ellos, tal como muestra el dibujo .

Un arbol-B de orden M (el máximo número de hijos que puede tener cada nodo) es un arbol

que satisface las siguientes propiedades:1. Cada nodo tiene como máximo M hijos.2. Cada nodo (excepto raiz y hojas) tiene como mínimo M/2 hijos.3. La raiz tiene al menos 2 hijos si no es un nodo hoja.4. Todos los nodos hoja aparecen al mismo nivel,y no tienen hijos.5. Un nodo no hoja con k hijos contiene k-1 elementos almacenados.6. Los hijos que cuelgan de la raíz (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:

log  M n 

En el peor de los casos,la altura de un arbol-B es:

Page 7: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 7/21

Donde M es el número máximo de hijos que puede tener un nodo.

Estructura de los nodos

Cada elemento de un nodo interno actúa como un valor separador, que lo divide ensubárboles. Por ejemplo, si un nodo interno tiene tres nodos hijo, debe tener dos valoresseparadores o elementos a1 y a2. Todos los valores del subárbol izquierdo deben ser menoresa a1, todos los valores del subárbol del centro deben estar entre a1 y a2, y todos los valores delsubárbol derecho deben ser mayores a a2.

Los nodos internos de un árbol B, es decir los nodos que no son hoja, usualmente serepresentan como un conjunto ordenado de elementos y punteros a los hijos. Cada nodointerno contiene un máximo de U hijos y, con excepción del nodo raíz, un mínimo de L hijos.Para todos los nodos internos exceptuando la raíz, el número de elementos es uno menos que

el número de punteros a nodos. El número de elementos se encuentra entre L-1 y U-1. Elnúmero U debe ser 2 L o 2 L-1, es decir, cada nodo interno está por lo menos a medio llenar.Esta relación entre U y L implica que dos nodos que están a medio llenar pueden juntarse para formar un nodo legal, y un nodo lleno puede dividirse en dos nodos legales (si es quehay lugar para subir un elemento al nodo padre). Estas propiedades hacen posible que el árbolB se ajuste para preservar sus propiedades ante la inserción y eliminación de elementos.

Los nodos hoja tienen la misma restricción sobre el número de elementos, pero no tienenhijos, y por tanto carecen de punteros.

El nodo raíz tiene límite superior de número de hijos, pero no tiene límite inferior. Por 

ejemplo, si hubiera menos de L-1 elementos en todo el árbol, la raíz sería el único nodo delárbol, y no tendría hijos.

Un árbol B de altura n+1 puede contener U veces por elementos más que un árbol B de profundidad n, pero el costo en la búsqueda, inserción y eliminación crece con la altura delárbol. Como todo árbol balanceado, el crecimiento del costo es más lento que el del númerode elementos.

Algunos árboles balanceados guardan valores sólo en los nodos hoja, y por lo tanto sus nodosinternos 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.

Búsqueda [editar]

La búsqueda es similar a la de los árboles binarios. Se empieza en la raíz, y se recorre el árbolhacia abajo, escogiendo el sub-nodo de acuerdo a la posición relativa del valor buscadorespecto a los valores de cada nodo. Típicamente se utiliza la búsqueda binaria paradeterminar esta posición relativa.

Page 8: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 8/21

Procedimiento [editar]

ejemplo2 inserción en árbol B

1. . Situarse en el nodo raíz.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(*).

Page 9: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 9/21

Inserción [editar]

Todas las inserciones se hacen en los nodos hoja.

1. Realizando una búsqueda en el árbol, se halla el nodo hoja en el cual

debería ubicarse el nuevo elemento.2. Si el nodo hoja tiene menos elementos que el máximo número deelementos legales, entonces hay lugar para uno más. Inserte el nuevoelemento en el nodo, respetando el orden de los elementos.

3. De otra forma, el nodo debe ser dividido en dos nodos. La división serealiza de la siguiente manera:

1. Se escoge el valor medio entre los elementos del nodo y el nuevoelemento.

2. Los valores menores que el valor medio se colocan en el nuevonodo izquierdo, y los valores mayores que el valor medio se colocanen el nuevo nodo derecho; el valor medio actúa como valorseparador.

3. El valor separador se debe colocar en el nodo padre, lo que puedeprovocar que el padre sea dividido en dos, y así sucesivamente.

Si las divisiones de nodos suben hasta la raíz, se crea una nueva raíz con un único elementocomo valor separador, y dos hijos. Es por esto por lo que la cota inferior del tamaño de losnodos no se aplica a la raíz. El máximo número de elementos por nodo es U -1. Así que debeser posible dividir el número máximo de elementos U -1 en dos nodos legales. Si este númerofuera impar, entonces U =2 L, y cada uno de los nuevos nodos tendrían (U -2)/2 = L-1elementos, y por lo tanto serían nodos legales. Si U -1 fuera par, U =2 L-1, así que habría 2 L-2elementos en el nodo. La mitad de este número es  L-1, que es el número mínimo deelementos permitidos por nodo.

Un algoritmo mejorado admite una sola pasada por el árbol desde la raiz,hasta el nodo dondela inserción tenga lugar,dividiendo todos los nodos que estén 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 estealgoritmo mejorado, debemos ser capaces de enviar un elemento al nodo padre y dividir elresto U -2 elementos en 2 nodos legales,sin añadir un nuevo elemento.Esto requiere queU =2 L en lugar de U = L-1,lo que explica por qué algunos libros de texto imponen esterequisito en la definicion de árboles-B.

Eliminación [editar]

La eliminación de un elemento es directa si no se requiere corrección 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 elelemento a ser borrado, pueda eliminarse sin necesidad de continuarreestructurando

Page 10: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 10/21

Se pueden dar dos problemas al eliminar elementos: primero, el elemento puede ser unseparador de un nodo interno. Segundo, puede suceder que al borrar el elemento número deelementos del nodo quede debajo de la cota mínima. Estos problemas se tratan a continuaciónen orden.

Eliminación 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 dejándolo con muy pocos elementos; por lo que serequerirán cambios adicionales en el árbol.

eliminar clave 20 de un nodo interno

Eliminación en un nodo interno [editar]

Cada elemento de un nodo interno actúa como valor separador para dos subárboles, y cuandoese elemento es eliminado, pueden suceder dos casos. En el primero, tanto el hijo izquierdo

Page 11: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 11/21

como el derecho tienen el número mínimo de elementos, L-1. Pueden entonces fundirse en unúnico nodo con 2 L-2 elementos, que es un número que no excede U -1 y por lo tanto es unnodo legal. A menos que se sepa que este árbol B en particular no tiene datos duplicados,también se debe eliminar el elemento en cuestión (recursivamente) del nuevo nodillo.

En el segundo caso, uno de los dos nodos hijos tienen un número de elementos mayor que elmínimo. Entonces se debe hallar un nuevo separador para estos dos subárboles. Note que elmayor elemento del árbol izquierdo es el mayor elemento que es menor que el separador. Dela misma forma, el menor elemento del subárbol 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 subárbol izquierdo o el menor elementodel subárbol derecho), elimínelo del nodo hoja en que se encuentra, yreemplace 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 después de la eliminación [editar]

Si al eliminar un elemento de un nodo hoja el nodo se ha quedado con menos elementos queel mínimo permitido, algunos elementos se deben redistribuir. En algunos casos el cambiolleva la deficiencia al nodo padre, y la redistribución se debe aplicar iterativamente haciaarriba del árbol, quizá incluso hasta a la raíz. Dado que la cota mínima en el número deelementos no se aplica a la raíz, el problema desaparece cuando llega a ésta.

La estrategia consiste en hallar un hermano para el nodo deficiente que tenga más del mínimonúmero de elementos y redistribuir los elementos entre los hermanos para que todos tenganmás del mínimo. Esto también cambia los separadores del nodo padre.

• Si el nodo hermano inmediato de la derecha del nodo deficiente tiene másdel mínimo número de elementos, escoja el valor medio entre elseparador y ambos hermanos como nuevo separador y colóquelo en elpadre.

• Redistribuya los elementos restantes en los nodos hijo derecho eizquierdo.

• Redistribuya los subárboles de los dos nodos . Los subárboles sontrasplantados 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

mínimo número de elementos, examine el nodo hermano inmediato de laizquierda.

• Si los dos nodos hemanos inmediatos tienen el mínimo número deelementos, cree un nuevo nodo con todos los elementos del nododeficiente, todos los elementos de uno de sus hermanos, colocando elseparador del padre entre los elementos de los dos nodos hermanosfundidos.

Page 12: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 12/21

• Elimine el separador del padre, y reemplace los dos hijos que separabapor el nuevo nodo fundido.

• Si esa acción deja al número de elementos del padre por debajo delmínimo, repita estos pasos en el nuevo nodo deficiente, a menos que seala raíz, ya que no tiene cota mínima en el número de elementos.

Árbol 2-3

En las ciencias de la computación, los árboles-2-3-4 son estructuras de datos de árbol que seencuentran comúnmente 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 realizanen tiempo logarítmico amortizado.

Definición

Son un tipo de árbol balanceado por altura (height balanced). Se define como un árbol endónde todos los nodos no-terminales tienen 2 ó 3 descendientes y todos los nodos hoja tienenla misma longitud (path length) o distancia desde la raíz.

Fueran introducidos con el objeto de mejorar el tiempo de acceso en estructuras de datosmanejadas en memoria secundaria, en las cuales el número de consultas a un registro influyede manera determinante en el tiempo de respuesta de la operación.

La estructura de árbol 2-3 exige que el crecimiento no se haga a nivel de las hojas (aunque lainserción sigue siendo en las hojas), sino q nivel de la raíz, ya que todas las hojas se debenmantener siempre en el mismo nivel. El proceso global de inserción comienza por localizar lahoja en la cual se debe agregar el elemento.

Propiedades

Un árbol 2-3 permite que un nodo tenga dos o tres hijos. Esta característica le permiteconservar el balanceo tras insertar o borrar elementos, por lo que el algoritmo de búsqueda escasi tan rápido como en un árbol de búsqueda de altura mínima. Por otro lado, es mucho másfácil de mantenerlo.

En un árbol 2-3, los nodos internos han de tener 2 ò 3 hijos y todas las hojas han de estar almismo nivel. De forma recursiva se pueden definir como:

A es un árbol 2-3 de altura h si:

• A es un árbol vacío (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 búsquedas, hay que introducir un orden entrelos elementos por lo que un árbol A es un árbol 2-3 de búsqueda de altura h si:

Page 13: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 13/21

• Todos los elementos de I son menores que r y todos los elementos de D son mayoresque r.

• A es de la forma (r1, r2,I, C, D), donde r1 _ r2, I, Ac y D son árboles 2-3 de búsquedade altura h-1 y todos los elementos de I son menores que r1, todos los elementos de Cson mayores que r1 y menores que r2 y todos los elementos de D son mayores que r2.

Esta definición implica que el número de hijos de un nodo es siempre uno más que el númerode elementos que contiene ese nodo. En el caso de las hojas se permiten uno o dos elementosen el nodo. Desde ahora nos referiremos a los árboles 2-3 de búsqueda simplemente comoárboles 2-3.

La especificación del tipo ARBOL23 es muy similar a la de otros árboles con una diferenciaque es la definición de tres operaciones generadoras en lugar de dos. arbolVacìo es laoperación que genera un árbol sin elementos, como en los otros tipos y hay una operación,consArbol, que genera un árbol 2-3 cuya raíz tiene un solo elemento y dos hijos y otra,cons3Arbol, que genera un árbol 2-3 cuya raíz tiene dos elementos y tres hijos. Estas dosúltimas operaciones son los generadores que se mantienen ocultos al usuario.

Árbol binario

 Árbol binario (desambiguación).

En ciencias de la computación, un árbol binario es una estructura de datos en la cual cadanodo:

•  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 búsqueda, los montículos binarios y Codificación de Huffman.

Definición de teoría de grafos

Page 14: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 14/21

En teoría de grafos, se usa la siguiente definición: «Un árbol binario es un grafo conexo,acíclico y no dirigido tal que el grado de cada vértice no es mayor a 3». De esta forma sóloexiste un camino entre un par de nodos.

Un árbol binario con enraizado es como un grafo que tiene uno de sus vértices, llamado raíz,

de grado no mayor a 2. Con la raíz escogida, cada vértice tendrá un único padre, y nunca másde dos hijos. Si reusamos el requerimiento de la conectividad, permitiendo múltiplescomponentes conectados en el grafo, llamaremos a esta última estructura un bosque.

Tipos de árboles binarios

• Un árbol binario es un árbol con raíz en el que cada nodo tiene como máximo doshijos.

• 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

(vértices con cero hijos) están a la misma profundidad (distancia desde la raíz,

también 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 lashojas están a profundidad n o n-1, para alguna n.

Un árbol binario es un árbol en el que ningún nodo puede tener más de dos subárboles. Enun árbol binario cada nodo puede tener cero, uno o dos hijos (subárboles). Se conoce el nodode la izquierda como hijo izquierdo y el nodo de la derecha como hijo derecho.

Un árbol binario sencillo de tamaño 9 y altura 3, con un nodo raíz cuyo valor es 2

Recorridos en profundidad

el método de este recorrido es tratar de encontrar de la cabecera a la raíz en nodo de unidad binaria

Recorrido en preorden

En este tipo de recorrido se realiza cierta acción (quizás simplemente imprimirpor pantalla el valor de la clave de ese nodo) sobre el nodo actual y

Page 15: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 15/21

posteriormente se trata el subárbol izquierdo y cuando se haya concluido, elsubárbol derecho. En el árbol de la figura el recorrido en preorden sería: 2, 7, 2,6, 5, 11, 5, 9 y 4.

Recorrido en postorden

En este caso se trata primero el subárbol izquierdo, después el derecho y por último el nodoactual. En el árbol de la figura el recorrido en postorden sería: 2, 5, 11, 6, 7, 4, 9, 5 y 2.

Recorrido en inorden

En este caso se trata primero el subárbol izquierdo, después el nodo actual y por último elsubárbol derecho. En un ABB este recorrido daría los valores de clave ordenados de menor amayor. En el árbol de la figura el recorrido en inorden sería: 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í, secomenzaría tratando el nivel 1, que sólo contiene el nodo raíz, seguidamente el nivel 2, el 3 yasí sucesivamente. En el árbol de la figura el recorrido en amplitud sería: 2, 7, 5, 2, 6, 9, 5, 11y 4.

Al contrario que en los métodos de recorrido en profundidad, el recorrido por niveles no esde naturaleza recursiva. Por ello, se debe utilizar una cola para recordar los subárbolesizquierdos y derecho de cada nodo.

Métodos para almacenar árboles binarios

Los árboles binarios pueden ser construidos a partir de lenguajes de programación de variasformas. En un lenguaje con registros y referencias, los árboles binarios son construidostípicamente con una estructura de nodos y punteros en la cual se almacenan datos, cada unode estos nodos tiene una referencia o puntero a un nodo izquierdo y a un nodo derechodenominados hijos. En ocasiones, también contiene un puntero a un único nodo. Si un nodotiene menos de dos hijos, algunos de los punteros de los hijos pueden ser definidos comonulos para indicar que no dispone de dicho nodo. En la figura adjunta se puede observar laestructura de dicha implementación.

Page 16: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 16/21

Los árboles binarios también pueden ser almacenados como una estructura de datos implícita

en arreglos, y si el árbol es un árbol binario completo, este método no desaprovecha elespacio en memoria. Tomaremos como notación la siguiente: si un nodo tiene un índice i, sushijos 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 raíz tenga índice cero). Este método tienecomo ventajas el tener almacenados los datos de forma más compacta y por tener una formamás rápida y eficiente de localizar los datos en particular durante un preoden transversal. Sinembargo, desperdicia mucho espacio en memoria.

Codificación 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 Nordenado 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 nodocorrespondiente al siguiente hermano de N, es decir, el próximo nodo en orden entre los hijos

de los padres de N.Esta representación 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 estén en una listaenlazada, encadenados junto con el campo derecho, y el nodo sólo tiene un puntero alcomienzo o la cabeza de esta lista, a través de su campo izquierdo.

Page 17: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 17/21

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 Cómo 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 siguienteshermanos.

Las hojas del árbol de la izquierda serían 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 ningún tipo de letrasen aquellos nodos que tienen un hijo izquierdo.

Algoritmo de HuffmanEl algoritmo de Huffman es un algoritmo para la construcción de códigos 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 símbolos, junto con sus frecuencias de apariciónasociadas, y produce un código de Huffman para ese alfabeto y esas frecuencias.

Descripción

El algoritmo consiste en la creación de un árbol binario que tiene cada uno de los símbolos por hoja, y construido de tal forma que siguiéndolo desde la raíz a cada una de sus hojas seobtiene el código Huffman asociado.

Page 18: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 18/21

1. Se crean varios árboles, uno por cada uno de los símbolos del alfabeto, consistiendocada uno de los árboles en un nodo sin hijos, y etiquetado cada uno con su símboloasociado y su frecuencia de aparición.

2. Se toman los dos árboles de menor frecuencia, y se unen creando un nuevo árbol. Laetiqueta de la raíz será la suma de las frecuencias de las raíces de los dos árboles que

se unen, y cada uno de estos árboles será un hijo del nuevo árbol. También seetiquetan las dos ramas del nuevo árbol: con un 0 la de la izquierda, y con un 1 la dela derecha.

3. Se repite el paso 2 hasta que sólo quede un árbol.

Con este árbol se puede conocer el código asociado a un símbolo, así como obtener elsímbolo asociado a un determinado código.

Para obtener el código asociado a un símbolo se debe proceder del siguiente modo:

1. Comenzar con un código vacío

2. Iniciar el recorrido del árbol en la hoja asociada al símbolo3. Comenzar un recorrido del árbol hacia arriba4. Cada vez que se suba un nivel, añadir al código la etiqueta de la rama que se ha

recorrido5. Tras llegar a la raíz, invertir el código6. El resultado es el código Huffman deseado

Para obtener un símbolo a partir de un código se debe hacer así:

1. Comenzar el recorrido del árbol en la raíz de éste2. Extraer el primer símbolo del código a descodificar 

3. Descender por la rama etiquetada con ese símbolo4. Volver al paso 2 hasta que se llegue a una hoja, que será el símbolo asociado alcódigo

En la práctica, casi siempre se utiliza el árbol para obtener todos los códigos 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 símbolos. En elgráfico se muestra el árbol construido a partir de este alfabeto siguiendo el algoritmo descrito.

Símbolo Frecuencia

A 0,15

Page 19: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 19/21

B 0,30

C 0,20

D 0,05

E 0,15

F 0,05

G 0,10

Se puede ver con facilidad cuál es el código del símbolo E: subiendo por el árbol se recorrenramas etiquetadas con 1, 1 y 0; por lo tanto, el código es 011. Para obtener el código de D serecorren las ramas 0, 1, 1 y 1, por lo que el código es 1110.

La operación inversa también es fácil de realizar: dado el código 10 se recorren desde la raízlas ramas 1 y 0, obteniéndose el símbolo C. Para descodificar 010 se recorren las ramas 0, 1 y0, obteniéndose el símbolo A.

Árbol para construir el código Huffman del ejemplo

Limitaciones

Page 20: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 20/21

Para poder utilizar el algoritmo de Huffman es necesario conocer de antemano las frecuenciasde aparición de cada símbolo, y su eficiencia depende de lo próximas a las frecuencias realesque sean las estimadas. Algunas implementaciones del algoritmo de Huffman sonadaptativas, actualizando las frecuencias de cada símbolo conforme recorre el texto.

La eficiencia de la codificación de Huffman también depende del balance que exista entre loshijos de cada nodo del árbol, siendo más eficiente conforme menor sea la diferencia defrecuencias entre los dos hijos de cada nodo.

Ejemplos:

• La codificación binaria es un caso particular de la codificación de Huffman queocurre cuando todos los símbolos del alfabeto tienen la misma frecuencia. Se tiene pues que la codificación binaria es la más eficiente para cualquier número desímbolos equiprobables.

• El algoritmo de Huffman aplicado sobre un alfabeto de dos símbolos asignará

siempre un 1 al primero y un 0 al segundo, independientemente de la frecuencia deaparición de dichos símbolos. En este caso nunca se realiza compresión de los datos,mientras que otros algoritmos sí podrían conseguirlo.

Una manera de resolver este problema consiste en agrupar los símbolos en palabras antes deejecutar el algoritmo. Por ejemplo, si se tiene la cadena de longitud 64

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB

El algoritmo de Huffman aplicado únicamente a los símbolos devuelve el código:

1111111111111111111111111111111111111111111111111111111111111110

También de longitud 64. Sin embargo, si antes de utilizar el algoritmo, se agrupan lossímbolos en las palabras "AA", "AB" y "B" (que se codifican como 1, 01 y 00), elalgoritmo devuelve la siguiente cadena:

111111111111111111111111111111101

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

Variaciones del algoritmo

Códigos Huffman n-arios

Es posible crear códigos de Huffman ternarios, cuaternarios, y, en general, n-arios. Para ellosólo es necesario realizar dos modificaciones al algoritmo:

Page 21: Árboles

5/13/2018 Árboles - slidepdf.com

http://slidepdf.com/reader/full/arboles-55a821b79047a 21/21

1. Los árboles a crear tendrán tantos hijos como símbolos posibles puedan aparecer enlos códigos Huffman. Por ejemplo, si es ternario se crearán árboles con tres hijos; sies cuaternario, con cuatro.

2. Si se expresa como s el número de símbolos en el alfabeto a codificar, y n el númerode símbolos que aparecen en el código Huffman, entonces s-1 debe ser múltiplo de n-

1. Es decir, para un código ternario, s debe valer 3, 5, 7, etc. Si esta condición no secumple, entonces se deben añadir símbolos "nulos" con frecuencia 0, que serviránsólo como relleno a la hora de construir el árbol.