You are on page 1of 9

Estructuras de datos dinmicas/rboles

Estructuras de datos dinmicas/rboles


rboles
rbol: estructura no lineal y dinmica de datos. Dinmica: puede cambiar durante la ejecucin de un programa. No lineal: a cada elemento del rbol pueden seguirle varios elementos. Estn formados por un conjunto de nodos y un conjunto de aristas que conectan pares de nodos.

Definicin no recursiva
Conjunto de nodos y conjunto de aristas que conectan pares de nodos con las siguientes caractersticas: Se distingue un nodo raz (no tiene padre). A cada nodo c (excepto la raz) le llega una arista desde exactamente un nodo p diferente a c, al cual se le llama padre de c. Hay un nico camino desde la raz hasta cada nodo. La misma longitud del camino es su nmero de aristas.

Definicin recursiva
Un rbol es o bien vaco o consiste en una raz y cero o ms subrboles no vacos cuyas races est conectada por medio de una arista con la raz. , ,, , cada una de

Definiciones
Los nodos que no tienen hijos se denominan hojas. Un rbol con N nodos debe tener (N-1) aristas. La profundidad de la raz es 0 y la de cualquier nodo es la de su padre ms 1. La altura de un nodo es 1 ms que la mayor altura de un hijo suyo. La altura de un rbol es la altura de la raz. Los nodos que tienen el mismo padre son hermanos.

Si hay un camino del nodo u al nodo v, u es ascendiente de v y v es descendiente de u. Si u v son propios. El tamao de un nodo es el nmero de descendientes (incluido l mismo). El tamao de un rbol es el tamao de su raz.

Operaciones bsicas
Insertar Buscar Eliminar Ir a la raz Recorrer

Estructuras de datos dinmicas/rboles

Implementacin primer hijo - siguiente hermano


Consiste en mantener los hijos de cada nodo en una lista enlazada. Cada nodo tiene dos referencias: una a su hijo ms a la izquierda y otra a su hermano de la derecha.

rboles binarios
Un rbol binario es o bien vaco o consta de una raz, un hijo rbol binario izquierdo y otro derecho. Los rboles binarios de bsqueda permiten inserciones y acceso a los elementos en tiempo logartmico. Los rboles binarios llamados colas con prioridad soportan acceso y eliminacin del mnimo de una coleccin de elementos.

rboles binarios de bsqueda


Para todo nodo A del rbol: Todos los valores de los nodos del subrbol izquierdo de A deben ser menores al valor del nodo A. Todos los valores de los nodos del subrbol derecho de A deben ser mayores o iguales al valor del nodo A. Un recorrido en inorden del rbol proporciona una lista en orden ascendente de los valores almacenados en los nodos. Para describir las operaciones, se considera que estas se enmarcan dentro de la clase NodoBinario. El lenguaje utilizado es JAVA. Operacin buscar public boolean buscar(Object o) { if (o.equals(valor)) return true; else if (o.compareTo(valor)<0) return buscar(getIzq(),o); else return buscar(getDer(),o); } Operacin insertar public NodoBinario insertar(Comparable o){ if (o.compareTo(valor)<0) setIzq(insertar(getIzq(),o)); else setDer(insertar(getDer(),o)); return this; } Dentro de la clase NodoBinarioVacio: public NodoBinario insertar(Comparable o) { return new NodoBinario(o); }

Estructuras de datos dinmicas/rboles Operacin recorrer Los recorridos pueden ser en preorden, postorden o inorden (orden simtrico). Todos son O(N). public void preOrder(SList aList) { aList.addElement(value); left.preOrder(aList); right.preOrder(aList); } public void inOrder(SList aList) { left.inOrder(aList); aList.addElement(value); right.inOrder(aList); } public void posOrder(SList aList) { left.posOrder(aList); right.posOrder(aList); aList.addElement(value); } Los recorridos no necesitan obligatoriamente recursividad, se puede emplear una pila para realizarlos iterativamente. Operacin borrado El nodo a borrar debe ser reemplazado por el nodo ms a la derecha en el subrbol izquierdo o el nodo ms a la izquierda en el subrbol derecho (el nodo ms a la derecha del subrbol izquierdo ser mayor o igual que cualquier otro nodo de ese subrbol y menor que todos los del subrbol derecho, y el nodo ms a la izquierda del subrbol derecho ser menor que todos los dems nodos de ese subrbol y mayor que todos los del subrbol izquierdo). Para el caso en el que el nodo elegido tengo un subrbol, hay por lo menos tres soluciones posibles: La primera consiste en conservar la estructura del subrbol, y colgar del elemento ubicado en el extremo (el elemento menor o mayor) correspondiente al subrbol donde se encuentra el elemento a promover hacia la raz (en este ejemplo, el subrbol izquierdo, por lo cual se buscar el elemento ms a la izquierda), lo cual es consistente, porque todos los elementos en el subrbol promovido sern mayores que los del subrbol del cual estaban colgados a la derecha. El inconveniente que presenta esta solucin es que debe utilizarse una funcin encontrarMnimo() o encontrarMximo(). La segunda solucin consiste en colgar del padre del nodo promovido hacia la raz, el subrbol remanente. Esto es consistente, porque todo elemento del subrbol derecho de un nodo ser mayor que el valor de ese nodo, y viceversa. Estas soluciones aprovechan la ventaja de contar con que el nodo promovido tiene, a lo sumo, un subrbol. Un hueco dejado por un nodo promovido tambin puede pensarse como una eliminacin. un arbol es un arbol jajaja

Estructuras de datos dinmicas/rboles

rboles binarios perfectamente equilibrados


La eficiencia de las operaciones depende exclusivamente de la altura del rbol. Para un rbol de N nodos perfectamente equilibrado el coste de acceso es de orden logartmico: O(log N). Sin embargo, se dice que si el rbol crece o decrece descontroladamente, el rendimiento puede disminuir considerablemente, siendo para el caso ms desfavorable (insertar un conjunto de claves ordenadas en forma ascendente o descendente) el coste de acceso: O(N). En un rbol binario perfectamente equilibrado, el nmero de nodos en el subrbol izquierdo y el nmero de nodos en el subrbol derecho, difieren como mucho en una unidad, y los subrboles son tambin equilibrados

rboles equilibrados
Un procedimiento de insercin que siempre restaure la estructura del rbol a un equilibrio perfecto es poco eficiente. Se usa una formulacin menos estricta de equilibrio: Un rbol est equilibrado si para cada uno de sus nodos ocurre que las alturas de sus dos subrboles difieren como mucho en 1(rboles AVL). Factor de equilibrio (FE) de un nodo El FE es la altura del subrbol izquierdo menos la altura del subrbol derecho. Los valores que puede tomar son -1, 0, 1. Si llegara a tomar los valores -2 o 2 debe reestructurarse el rbol. Todos los rboles perfectamente equilibrados son AVL. La longitud de camino media es prcticamente idntica a la de un rbol perfectamente equilibrado. En un AVL se puede realizar con complejidad del O(log N) las siguientes operaciones: Encontrar un nodo con una clave dada. Insertar un nodo con una clave dada. Borrar un nodo con una clave dada. Un rbol AVL de altura H tiene por lo menos (Fibonacci(H+3) -1) nodos. Los pasos necesarios para insertar un nodo en un rbol AVL son: Agregar el nodo como en un rbol binario de bsqueda. En el regreso por el camino de bsqueda se comprueba el FE de los nodos. Si un nodo presenta un FE incorrecto (2 o -2) se reestructura el rbol y se contina el ascenso hasta llegar a la raz. Casos en situacin de reestructurar: 1. 2. 3. 4. Una insercin en el subrbol izquierdo del hijo izquierdo de X. Una insercin en el subrbol derecho del hijo izquierdo de X. Una insercin en el subrbol izquierdo del hijo derecho de X. Una insercin en el subrbol derecho del hijo derecho de X.

Inserciones en los mrgenes 1 y 4: inserciones en los mrgenes: rotacin simple: intercambia los papeles de los padres y de los hijos, manteniendo la ordenacin. // Rotacin izquierda - izquierda private static NodoAVL rotarConHijoIzq(NodoAVL A) { NodoAVL B = (NodoAVL) A.getIzq(); //Asigna nombre A.setIzq(B.getDer()); B.setDer(A); return B; }

Estructuras de datos dinmicas/rboles Inserciones por dentro 2 y 3: inserciones por dentro: rotacin doble. Notar que una rotacin simple no resuelve el problema, ya que la rama que provoc el desequilibrio se descuelga del nodo promovido y se cuelga al nodo que desciende un nivel, de manera que se mantiene con la misma profundidad, que es la que provoc el desequilibrio. Por lo tanto, antes de rotar, debe desplazarse el desequilibrio a la rama correspondiente, es decir, transformamos el caso de una insercin por dentro, a un caso de insercin en el margen, utilizando una rotacin. // Rotacin izquierda - derecha private static NodoAVL rotarDobleConHijoIzq(NodoAVL A) { NodoAVL B = (NodoAVL) A.getIzq(); //Asigna nombre A.setIzq(rotarConHijoDer((NodoAVL) B)); return rotarConHijoIzq(A); } Como se ve, el problema se convirti en un problema igual al del primer caso. Los pasos necesarios para suprimir un nodo en un rbol AVL son: Suprimir el nodo como en un rbol binario de bsqueda. En el regreso por el camino de supresin se comprueba el FE de los nodos. Si un nodo presenta un FE incorrecto (2 o -2) se reestructura el rbol y se contina el ascenso hasta llegar a la raz. La reestructuracin se efecta cuando al regresar por el camino de bsqueda despus de una insercin o una supresin se comprueba que la condicin del FE se ha violado. Una supresin puede provocar varias reestructuraciones. En la prctica se utilizan otros esquemas de equilibrio como los rboles rojinegros: como en los AVL las operaciones son logartmicas en el peor caso. La ventaja es que las inserciones y eliminaciones pueden realizarse con un nico recorrido descendente.

rboles rojinegros
rbol binario de bsqueda, donde cada nodo est coloreado con los colores rojo o negro, y se verifican las siguientes propiedades: 1. La raz es negra. 2. Si un nodo es rojo, sus hijos deben ser negros. 3. Todos los caminos desde un nodo a un nodo vaco deben contener el mismo nmero de nodos negros. Las condiciones (2) y (3) aseguran que el rbol nunca est demasiado desbalanceado. (2) asegura que no puedan haber demasiados nodos rojos, y (3) dice que, despreciando el nmero de nodos rojos, que es limitado, el rbol es perfectamente balanceado. La condicin (1) es trivial: si la raz es roja, simplemente se colorea negra, ya que esto no violar ninguna regla. En los ARN la operacin eliminar se complica. Cuando se necesitan rboles equilibrados y se requieren muchas eliminaciones se emplean los AA-rboles que aaden una condicin adicional a las impuestas por los ARN: 4. Los hijos izquierdos no pueden ser rojos.

Estructuras de datos dinmicas/rboles Altura de un ARN En un ARN con n nodos, la altura h ser: Demostracin La condicin (3) nos permite asegurar que, despreciando el nmero de nodos rojos, el rbol es perfectamente balanceado, y, en virtud de esa caracterstica, su altura . La condicin (2) evita que haya nodos rojos consecutivos, como mximo, la mitad de los nodos de un camino -que constituirn una altura- sern rojos. Operaciones Se pueden realizar operaciones de bsqueda con complejidad O(log N), por lo expuesto anteriormente. Al realizar una insercin, la complejidad de bsqueda ser O(log N), pero aparece un problema: el resultado ser un rbol de bsqueda binario, pero no necesariamente un ARN. Si coloreamos el nuevo nodo rojo, el balance de negros quedar intacto, pero se puede incurrir en una violacin rojo-rojo. Si lo coloreamos negro, no se incurrir en una violacin rojo-rojo, pero en este caso, siempre alteraremos el balance de negros. Al eliminar, si el nodo a eliminar es negro, ambas violaciones pueden aparecer. Reparacin del balance del rbol Una vez detectada una violacin, se deben tomar medidas que reparen el balance del rbol. Estas medidas utilizan dos herramientas: rotaciones y cambios de color. Insercin ascendente Sea X la nueva hoja aadida, P su padre, S el hermano de P (si existe) y G el abuelo. 1. Los nuevos nodos se insertan en el rbol como hojas de color rojo. 2. Si el padre es negro, hemos acabado. 3. Si el padre es rojo violamos la regla 2, entonces debemos modificar el rbol de forma que se cumpla la regla (2) sin introducir violaciones de la propiedad (3). 4. Si el padre P es la raz, se colorea negro. La altura negra aumenta en 1, pero el balance se preserva. Hemos acabado. Reparacin del balance Asumiendo que P no es la raz 5. Si S es rojo, se puede aplicar un cambio de color: Se elimina as la violacin, y el balance de negros se mantiene. Qu pasa si el padre de G es tambin rojo? Solucin: propagar este procedimiento hacia arriba hasta conseguir que no haya dos nodos rojos consecutivos o alcanzar la raz. Esta propagacin es anloga a la que se hace en los rboles AVL. 6. Si S es negro, tenemos dos casos, con sus simtricos asociados: violacin en el margen, y violacin por dentro. 7. Si es una violacin es por dentro, la convertimos a una violacin en el margen haciendo una rotacin: Como X y P son rojos, no aaden nada en el balance de negros a los caminos que pasan por g, de manera que el balance se preserva. 8. Teniendo el caso de violacin por dentro, se efecta una rotacin simple. La rama izquierda de desbalancea, le falta un nodo negro para todos sus caminos, y an tenemos la violacin rojo-rojo. Solucionamos ambos problemas haciendo un cambio de color.

Estructuras de datos dinmicas/rboles Insercin descendente Objetivo: garantizar que en el momento de la insercin S no sea rojo, de manera que slo haya que aadir una hoja roja y, si fuere necesario, realizar una rotacin (simple o doble). En el camino descendente, si un nodo X tiene dos hijos rojos, el color de X cambia a rojo y el de sus dos hijos a negro. El nmero de nodos negros en los caminos por debajo de X permanece inalterable. Si X es la raz, la convertiramos en roja, hay que volver a negro (esto no puede violar ninguna de las reglas). Si el padre de X es rojo, hay que aplicar rotacin simple o doble. Qu pasa si el hermano del padre de X es tambin rojo? Esta situacin NO puede darse, gracias al proceso efectuado en el camino descendiente.

rboles B
Mientras que la altura de un rbol binario completo es, aproximadamente, completo es, ms o menos, , la altura de un rbol M-ario . Un B-rbol de orden M es un rbol M-ario que verifica:

Cada pgina, excepto la pgina raz y las pginas hojas, tienen entre M/2 y M descendientes, y entre (M/2 -1) y (M-1) elementos. La pgina raz, o es una hoja o tiene entre 2 y M descendientes. Las pginas hojas estn todas al mismo nivel.

Relacin entre los rboles B y los rboles rojinegros


Si juntamos un nodo negro con sus hijos rojos, si los hubiere, en un mismo nodo, se obtiene un rbol no binario con altura igual a la altura negra, con un mximo de 3 elementos y 4 hijos, y un mnimo de un elemento; en definitiva, es un rbol B de orden 4.

Bsqueda
Debe tenerse en memoria principal la pgina sobre la cual vamos a buscar. Considrese el elemento a buscar x. Si la bsqueda es infructuosa dentro de la pgina se estar en una de las siguientes situaciones: para 1 i < n. La bsqueda contina en la pgina . La bsqueda contina en la pgina . . La bsqueda contina en la pgina .

. Si en algn caso la referencia es nula, es decir, si no hay pgina

descendiente, entonces no hay ningn elemento x en todo el rbol y se acaba la bsqueda.

Insercin
Siempre se inserta en los nodos hojas. Primero se comprueba que la clave no se encuentre en el rbol. Si la cantidad de elementos es menor que 2n: Se inserta en forma secuencial la clave. Si la cantidad de elementos es 2n: Los 2n+1 elementos se dividen en dos pginas, excluyendo la clave del medio. La clave del medio se inserta en el nodo padre.

Borrado
Si la clave a ser borrada no est en una hoja, su predecesor inmediato tiene que estar en una hoja (esto se debe a que todas las hojas tienen el mismo nivel, de manera que si existe un valor menor en un nodo ms abajo, tambin tiene que haber uno mayor), y se puede promover, y as borrar el espacio que estaba en la hoja. Si la hoja queda con menos de n elementos, se comprueba si se puede promover un elemento de un hermano adyacente a su padre, y bajar el del padre a la hoja. Si el hermano tiene slo n elementos, las dos hojas y la clave del medio se unen, y la clave del medio se elimina del nodo padre.

Estructuras de datos dinmicas/rboles

rboles B+
Las diferencias con los rboles B son que: Slo los nodos hoja apuntan a los registros o cubetas del fichero. Existe un orden lineal entre las hojas, que estn encadenadas mediante punteros para permitir un eficiente acceso secuencial.

Bsqueda por clave


Buscar en la raz el valor ms pequeo mayor que la clave x. La bsqueda sigue por el puntero hasta que llegue a un nodo hoja, que ser donde est el puntero al bloque o cubeta (cuando un elemento se encuentre en una pgina raz o interior la bsqueda continuar por la rama derecha de dicha clave, hasta llegar a una hoja).

Insercin
Se busca el nodo hoja correspondiente y se inserta la clave si no est all. Si tiene lugar una particin, se inserta una clave en el nodo padre, que ser duplicada si la particin ocurre en una hoja.

Eliminacin
Se busca el nodo hoja correspondiente y se elimina la clave. Si al eliminar una clave, n queda menor a (M/2 -1), entonces debe realizarse una redistribucin de claves, tanto en el ndice como en las pginas hojas.

Fuentes y contribuyentes del artculo

Fuentes y contribuyentes del artculo


Estructuras de datos dinmicas/rboles Fuente: http://es.wikibooks.org/w/index.php?oldid=168044 Contribuyentes: Hoo man, LadyInGrey, Rgfernan, Wutsje, 10 ediciones annimas

Licencia
Creative Commons Attribution-Share Alike 3.0 Unported http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/