You are on page 1of 5

rboles balanceados Habamos visto que se puede demostrar por induccin que en un rbol completo el nmero de nodos totales

es (2 ** h+1) 1. Esto nos indica que las cosas que se hacen en rboles son de orden log n pero slo en el caso en que el rbol est lleno. En el peor de los casos las cosas pueden ser lineales O(n). Cmo poder garantizar, entonces que se mantenga un balanceo? Cada vez que debido a una insercin o eliminacin el rbol se desbalancee, reubicar los nodos de modo que, manteniendo el invariante de un rbol de bsqueda binaria, se trate de mantener la altura del rbol. Ej:

El primer tipo de rboles balanceados fue el AVL (Adelson Velskii Landis). No son frecuentemente implementados, ya que hay otros mejores, pero las ideas que hay detrs de ellos se ven en los dems tipos de rboles balanceados. Se trata de incluir otra condicin ms en el invariante de modo de asegurar que la bsqueda sea O(log n): LO ms simple sera requerir que para un rbol AVL la altura de su subrbol derecho sea igual a la de su subrbil izquierdo. Recordemos que los rboles se definen recursivanmete, por lo tanto esto se debera cumplir para cada nodo. Esto es sin embargo muy restrictivo ya que implicara que todo rbol AVL debera ser completo adems. La definicin de rboles AVL es entonces algo ms relajada: Def: Un rbol AVL es un rbol binario con la propiedad adicional que para cualquier nodo En el rbol la altura de su subrbol izquierdo y de su subrbol derecho difieren a lo ms en 1.

Esta condicin asegura que el rbol slo tendr altura logartmica. Para probar esto necesitamos mostrar que un rbol de altura H tiene por lo menos C**H nodos para alguna constante H>1. En otras palabras, si el mnimo nmero de nodos en un rbol es exponencial a su altura, entonces la mxima altura de un rbol con N elementos es dada por Log en base C de N. Esto se puede probar con los nmeros de Fibonacci: Sea S(H) un rbol AVL con altura H y con el mnimo de elementos para esa altura. Entonces S(0) = 1 y S(1) = 2. Ahora, por la condicin de un rbol AVL sabemos que un rbol AVL mnimo de altura H tiene como hijos uno mnimo de altura H-1 y otro mnimo de altura H-2, ya que el desbalanceo puede ser a lo ms de 1. Del dibujo podemos ver que la cantidad de nodos de este rbol es S(H) = S(H-1) + S(H-2) + 1. Ahora los nmeros de Fibonacci eran F(N) = F(N-1)+F(N-2) con F(0) = 1 y F(1) = 1. Corrigiendo: S(H) = F(H+3). Ahora, se sabe que el fibonacci de un nmero i es alrededor de (K**i)/sqrt(5) con K alrededor de 1.618 (o sea > 1). Consecuentemente un rbol AVL de altura H tiene a lo menos (gruesamente estimando) K**(H+3)/sqrt(5), por lo cual la altura para un rbol AVL mnimo es logartmica con respecto al nmero de nodos. Esto implica que las operaciones sobre un rbol AVL estn acotadas logaritmicamente.

Pero esto no se logra gratis, el costo es la complicacin de las operaciones insertar y eliminar ya que estas son las que pueden desbalancear un rbol. Una observacin clave es que es que despus de una insercin slo los nodos que estaban en el recorrido desde la raz hasta el lugar de insercin pueden resultar desblanceados. Al volver recursivamente hacia la raz despus de haber insertado o eliminado un nodo es posible encontrar nodos cuyo nuevo balance viole el principio de rbol AVL. Para hacer ms fcil este control, los nodos de un rbol AVL adems de tener la informacin normal (el elemento) tiene adems un nmero de balanceo que es la diferencia de alturas entre el rbol izquierdo y el rbol derecho (altura(izq) atura(der)). Veamos los casos de insercin que pueden desbalancear un rbol AVL. Un nodo X podria necesitar ser rebalanceado si se inserta un nuevo nodo: 1234Caso 1 en el subrbol izquierdo del hijo izquierdo de X en el subrbol derecho de hijo izquierdo en el subrbol izquierdo del hijo derecho en el subrbol derecho del hijo derecho Caso 4 COMO ESTN LOS INDICADORES DE BALANCE ?

Caso 2

Caso 3

COMO ESTN LOS INDICADORES DE BALANCE ?

En el caso 1 y 4 se habla de un nodo externo causando el desbalanceo. En el caso 2 y 3 de uno interno.

Para resolver el caso 1 y 4 de los nodos externos se hace lo que se llama rotacin simple (ej pag 513).

Static NodoArbol rotHijoIzq(NodoArbol p) { NodoArbol q = p.izq; p.izq = q.der; q.der = p; p.bal = 0; q.bal = 0; return q; }

Static NodoArbol rotHijoDer(NodoArbol p) { NodoArbol q = p.der; p.der = q.izq; q.izq = p; p.bal = 0; q.bal = 0; return q; }

Para los casos 2 y 3 de los nodos internos se hace la llamada rotacin doble (ej pag 515) P Q R A B C D A B C D Q R P

Static NodoArbol dobleConIzq(NodoArbol p) { NodoArbol q = p.izq, r = q.der; q.der = r.izq; p.izq = r.der; r.izq = q; r.der = p; if (r.bal > 0) { // B era mas alto que C q.bal = 0; r.bal = 1; p.bal = -1; } } Insercin en AVL. La manera ms simple es un algoritmo recursivo: Para insertar un elemento X hacemos un algoritmo recursivo (como el conocido para binarios) que inserta en el lugar preciso. El subrbol formado por el nodo recin creado es 1ms alto que el antiguo as que debe informar de esto a su padre para que recalcule el factor de balance. Si al calcularlo el padre ve que se mantiene el balance, est todo en orden pero debe informar a su padre que creci en uno para que este recalcule tambin. Si en algn momento se ve un desbalance que no se puede tolerar se realiza la rotacin necesaria. Desde ese momento no es necesario informar de crecimiento de rbol hacia arriba ya que se volvi la altura original.

ARBOLES ROJO-NEGRO Tienen la gracia de que se puede balancear mientras se va hacia abajo (no se necesita el paso de vuelta hacia arriba por lo cual no se necesita hacerlo en forma recursiva). Como resultado la implementacin es ms simple y rpida que el AVL. Los rojo-negro tienen las siguientes caractersticas: 1234Cada nodo est coloreado rojo o negro La raz es negra Si un nodo es rojo, los hijos deben ser negros (no se permiten dos rojos seguidos en un path) Cualquier path desde la raz hasta una referencia null debe contener el mismo nmero de nodos negros

Ver ejemplo en pg 517. Se puede demostrar por induccin que si todo path desde la raz hasta una referencia null tiene B nodos negros, entonces tiene que haber por lo menos (2**B)-1 nodos negros en el rbol. Ms an, como la raz es negra y no pueden haber dos nodos consecutivos rojos en el path, la altura de un rbol rojo-negro es a lo ms 2*log(N+1) (intercalemos un nodo rojo en alguno de los path cada nodo negro). Consecuentemente, la bsqueda est garantizada de ser logartmica. Insercin, primera aproximacin: botton up Recordemos que todo nodo nuevo se inserta como una hoja en un rbol. Si la coloreamos negra entonces de seguro estaremos violando la propiedad 4 ya que habr un path a una referencia null con un nodo negra ms (en realidad 2). Insertemos la hoja nueva de color rojo. Si el padre era negro est todo bien y hasta aqu llega el problema. Si el padre ya era rojo entonces estamos en problemas, pero con rotaciones y cambios de colores es posible solucionar esto. Hay varios casos a considerar (y sus espejos) si el padre era rojo: Primero consideremos que el tio era negro o null. Si llamamos x al nuevo nodo, p al padre, a al abuelo y t al tio podemos hacer una rotacin y un cambio de colores que nos dejar todo en orden de nuevo. Slo p y x pueden ser rojos en este caso porque si a fuera rojo hubiese una situacin no vlida ANTES de insertar. Ahora podemos usar la terminologa de los rboles AVL y decir que el nodo nuevo x puede ser externo o interno. Si es externo una rotacin simple y un cambio de color de p y de a arreglan la cosa: a p X X X X X X X X X X x C D t x E A B A B D E C a t X X X X X X X X X X x t x A p B C a X X X X X X X X X X D E t p

Aunque x es una hoja y en ese caso t es null, hemos dibujado un caso ms general para usar esto ms adelante. Para el caso de una insercin como nodo interno: rotacin doble. a p A

X X X X X X X X X X B C

Antes de continuar tenemos que estar seguros que esto funciona tambin para el caso general (en que X no es hoja). Primero podemos ver que se mantienen las condiciones de rojo-negro intercalados y tambin la de los nodos negros en los paths ya que se conservo la cantidad de nodos negros (dos a la derecha, 1 a la izquierda). Tambin se puede ver que las races de A,B,C y D deberan haber sido originalmente negras (o null) si todo estaba en orden antes de aparecer X. OK, hasta aqu, pero qu pasa si el to era rojo? Bueno, se ve que esto tambin se puede arreglar: a p X X X X X X X X X X x C D t x E A B A B D a p A x t A p B C x a X X X X X X X X X X D E X t E C a t X X X X X X X X X X p

Aunque todo esto parece funcionar queda una pregunta: qu pasa si el padre de a era originalmente rojo? Bueno, aqu podemos hacer los mismos anlisis que hemos hecho hasta ahora. Esta vez s que tiene sentido tener en cuenta lo del caso general, o sea que estamos tratando con nodos internos. Insercin top-down en rboles rojo-negro Para evitar la necesidad de tener que estar rotando el rbol cuando se vaya hacia arriba de vuelta de haber hecho una insercin podemos usar un truco cuando vayamos hacia abajo de modo de asegurar que cuando se llega al lugar que se debe insertar, el to nunca ser rojo por lo cual bastar con insertar una hoja roja y hacer a lo ms una rotacin (simple o doble). El procedimiento se basa en lo siguiente: mientras se va hacia abajo, si vemos un nodo x que tiene dos hijos rojos cambiamos x a rojo y hacemos los hijos negros. X

Es claro que el nmero de nodos negros bajo x permanece inalterado. El problema es que si el padre de x era rojo tenemos dos rojos consecutivos. En teste caso podemos aplicar las rotaciones simple o doble vistas anteriormente, en las cuales haba un to negro, dependiendo de dnde se encuentra x (estas no suben un nodo rojo as que no par ms). Pero qu pasa si el to es rojo ! ah si se pasa un nodo rojo hacia arriba !. Esto no puede pasar ya que en el viaje hacia abajo si se encontr que el abuelo tena dos hijos rojos se cambiaron a negros. Ejemplo: cuadros 18.34 (pg 517) se quiere poner el 45cuando bajamos vemos que el 50 tiene dos hijos rojos. Esto se cambia (ver cuadro 18.39 en pg. 520). Esto produce que el 60 y el 50 queden sucesivamente rojos. Se hace una rotacin simple (ver cuadro 18.40 en pagina del lado) y luego se puede poner el 45 sin problemas.

X X X X X X X X X X B C

You might also like