You are on page 1of 15

rboles

NDICE

Introduccin


1. Arboles

1.1. Concepto de rbol

1.2. Clasificacin de rboles

1.3. Operaciones bsicas sobre rboles binarios

1.4. Aplicaciones

1.5. rboles balaceados (AVL)


Conclusin


Bibliografa





















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











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.

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






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).












op rotDer: AVL{X} -> [AVL{X}] .
eq rotDer(arbolBin(R1, arbolBin(R2, I2, D2), D1)) ==
arbolBin(R2, I2, arbolBin(R1, D2, D)) .

You might also like