Ivn Emilio Andrade Aguilar John Jairo Rivera Martin 11050065 INGENIERIA INFORMATICA SABATINO 3ER SEMESTRE PEROTE, VER. 2013 F ARBOLES BALANCEADOS La bsqueda ms eficiente se efecta en un rbol binario balanceado. Desafortunadamente, la funcin Inserta no asegura que el rbol permanezca balanceado, el grado de balance depende del orden del orden en que son insertados los nodos en el rbol. La altura de un rbol binario es el nivel mximo de sus o!as "profundidad#. La altura del rbol nulo se define como $%. &n rbol binario balanceado es un rbol binario en el cual las alturas de los dos subrboles de todo nodo difiere a lo sumo en %. 'l balance de un nodo en un rbol binario se define como la altura de su subrbol izquierdo menos la altura de su subrbol dereco. (ada nodo en un rbol binario balanceado tiene balance igual a %, )% o *, dependiendo de si la altura de su subrbol izquierdo es ma+or que, menor que o igual a la altura de su subrbol dereco. ,upngase que tenemos un rbol binario balanceado, + usamos la funcin para insertar un nodo en dico rbol. 'ntonces el rbol resultante puede o no permanecer balanceado. 's fcil ver que el rbol se vuelve desbalanceado si + solo si el nodo reci-n insertado es un descendiente izquierdo de un nodo que tenia de manera previa balance de %, o si es un i!o dereco descendiente de un nodo que tenia de manera previa balance $%. .ara que el rbol se mantenga balanceado es necesario realizar una transformacin en el mismo de manera que/ %. 'l recorrido en orden del rbol transformado sea el mismo que para el rbol original "es decir, que el rbol transformado siga siendo un rbol de bsqueda binaria#. 0. 'l rbol transformado est- balanceado. 1 2 ( F 3 Figura % D ' a# 4rbol original ( 2 1 1 ' ( 2 b# 5otacin dereca F 3 D ' c# 5otacin izquierda 'l rbol de la figura %b es una rotacin dereca del rbol con ra6z en 1 de manera similar, el rbol de la figura %c se dice que es una rotacin izquierda del rbol con ra6z en 1. &n algoritmo para implantar una rotacin izquierda de un subrbol con ra6z en p es el siguiente/ q7 rigt"p#8 old7left"q#8 left"q#7p8 rigt"p#7old8 Llamemos a esta operacin leftrotation(p). Rightrotation(P), puede definirse de manera similar. .or supuesto, en cualquier rotacin debe cambiarse el valor de la ra6z del subrbol que est siendo rotado para que apunte a la nueva ra6z. "'n el caso de la rotacin izquierda anterior, esta nueva ra6z es q#. 9bs-rvese que el orden de los nodos en un recorrido en orden se preserva en ambas rotaciones/ izquierda + dereca. .or consiguiente, se deduce que cualquier nmero de rotaciones "izquierda o dereca# pueden e!ecutarse en un rbol desbalanceado para obtener uno balanceado, sin perturbar el orden de los nodos en un recorrido en orden. ,upngase que se realiza una rotacin dereca en el subrbol con ra6z en 1 de la figura 0 a. 'l rbol resultante se muestra en la figura : a. 9bs-rvese que el rbol de la figura : a produce el mismo recorrido en orden que el de la figura 0 a + tambi-n est balanceado. ;ambi-n, como la altura del subrbol de la figura 0 a era n<0 antes de la insercin + la altura del subrbol de la figura : a es n<0 con el nodo insertado, el balance de cada ancestro del nodo 1 no se altera. 1s6, reemplazando el subrbol de la figura 0= por su rotacin dereca de la figura :=, garantizamos que se mantenga como rbol de bsqueda binaria balanceado. 'n la figura 0b donde el nodo reci-n creado se inserta en el subrbol dereco del 2. ,ea ( el i!o dereco de 2. ">a+ tres casos/ ( puede ser el nodo reci-n insertado en cu+o caso n7)%, o el nodo reci-n insertado puede estar en el subrbol dereco o izquierdo de (. La figura 0b ilustra el caso en que est en el subrbol izquierdo8 el anlisis de los otros casos es anlogo#. ,upngase que una rotacin izquierda del subrbol con ra6z en 2 precede a una rotacin dereca del subrbol con ra6z en 1. La figura :b ilustra el rbol resultante. 'l siguiente algoritmo busca e inserta en un rbol binario balanceado que no est- vac6o. (ada nodo del rbol contiene ? campos/ @ + r, que guardan la llave + el registro de manera respectiva left + rigt son apuntadores a los subrboles izquierdo + dereco de manera respectiva + bal, cu+os valores es %, )% o *, dependiendo del balance del nodo. 'n la primera parte del algoritmo, si la llave deseada an no se encuentra en el rbol, se inserta un nuevo nodo en el rbol de bsqueda binario, sin importar el balance. La primera fase tambi-n toma en cuenta al ancestro ms !oven, +a que puede desbalancearse tras la insercin. 'l algoritmo ace uso de la funcin ma@etree descrita con anterioridad + de las rutinas rigtrotation + leftrotation, que aceptan un apuntador a la ra6z de un subrbol + e!ecutan la rotacin deseada. La altura mxima de un rbol de bsqueda binaria balanceado es %.AAlog0n, de manera que una bsqueda en un rbol as6 nunca requiere ms de AAB de comparaciones que las necesarias en un rbol balanceado de manera completa. 'n la prctica los rboles de bsqueda binaria balanceados se comportan an me!or, produciendo tiempos de bsqueda del orden de log0n <*.0? para valores grandes de n. 'n promedio se requiere una rotacin en el AC.? B de las inserciones. 'l algoritmo para eliminar un nodo de un rbol de bsqueda binaria balanceado conservando su balance l es an ms comple!o. Dientras que la insercin requiere a lo sumo una rotacin doble, la eliminacin puede requerir una rotacin "doble o simple# en cada nivel del rbol o 9"log n# rotaciones. ,in embargo, en la prctica, se a visto que solo se requiere un promedio de *.0%A rotaciones "simples o dobles# por eliminacin. Los rboles de bsqueda binaria balanceados que emos visto se llaman rboles de altura bala!eada porque su altura se usa como criterio para el balanceo. &n m-todo, se define "eso del rbol como el nmero de nodos externos en el mismo "que es igual al nmero de apuntadores nulos#. ,i el cociente del peso del subrbol izquierdo de todo nodo entre el peso del subrbol con ra6z en el nodo est entre alguna fraccin a + %)a, el rbol es un rbol de "esos bala!eados de ra#$ a o se dice que est en la clase EbFaG. (uando una insercin o eliminacin ordinaria en un rbol de clase EbFaG elimina al rbol de dica clase, se usan rotaciones para restaurar la propiedad de pesos balanceados. 9tro tipo de rbol llamado por ;ar!an, un rbol binario balanceado requiere que para todo nodo nd, la longitud del camino ms largo de nd a un nodo externo se a lo sumo dos veces la longitud del camino ms corto de nd a un nodo externo "recu-rdese que los nodos externos son nodos agregados al rbol en cada apuntador nulo#. De nuevo se usan rotaciones para mantener el balance despu-s de una insercin o eliminacin. Los rboles balanceados de ;ar!an tienen la propiedad de que, tras una eliminacin o insercin, puede restaurarse el balance aplicando a lo sumo una rotacin doble + una simple, en contraste con las posibles 9"log n# rotaciones tras la eliminacin en un rbol de altura balanceada. Los rboles balanceados tambi-n pueden usarse para una implantacin eficiente de colas de prioridad. La insercin de un nuevo elemento requiere a lo sumo 9"log n#, pasos para encontrar la posicin adecuada + 9"%# pasos para accesar el elemento "siguiendo los apuntadores izquierdos asta la o!a de la extrema izquierda# + 9"log n# o 9"%# pasos para eliminar esta o!a. 1s6 al igual que una cola de prioridad implantada un eap, una cola de prioridad implantada usando un rbol balanceado puede e!ecutar cualquier secuencia de n inserciones + eliminaciones m6nimas en 9"nlog n# pasos. 1 % 2 4rbol ;: de altura * n 4rbol ;% de altura n 4rbol ;0 de altura n Figura 0 a# Hodo reci-n insertado 1 % 2 4rbol ;% de altura n * * 4rbol ;0 de altura n)% ( 4rbol ;: de altura n)% 4rbol ;A de altura n b# Hodo reci-n insertado 2 * 4rbol ;% de altura n 1 * a# Hodo reci-n insertado 4rbol ;0 de altura n 4rbol ;: de altura n Figura : ( * b# 1 2 * )% 4rbol ;% de altura n 4rbol ;0 de altura n)% 4rbol ;: de altura n)% 4rbol ;A de altura n Hodo reci-n insertado (9DI39 D' 'I'D.L9 JK busqueda e insercion en el arbol binario PARTE 1 KJ fp7H&LL8 p7tree8 f+a7H&LL8 +a7p8 /* a apunta al ancestro !as "o#en que puede llegar a desbalancearse.fa se$ala al padre de a, fp al padre de p KJ Eile"pL7H&LL#M if"@e+77@"p## return "p#8 q7"@e+N@"p# O left"p#/rigt"p#8 if"qL7H&LL# if"bal"q#L7*#M f+a7p8 +a7q8 P JJ fin del if fp7p8 p7q8 P JJ fin del %hile // inserta nue#o registro q7ma@etree"rec,@e+#8 bal"q#7*8 "@e+N@"fp## O left"fp#7q/rigt"fp#7q8 /* el balance de todos los nodos entre node(a) node(q) debera alterarse,!odificando su #alor de & KJ p7 "@e+ N @"+a## O left"+a# / rigt"+a#8 s7p8 Eile"pL7q#M if"@e+N@"p##M bal"p#7 %8 p7left"p#8 P elseM bal"p#7)%8 p=righ!p"# P JJ fin del if P JJ fin del %hile JK PARTE ' deter!inar si el arbol se encuentra desbalanceado o no. si lo esta, q es el nodo recien insertado, a es su ancestro desbalanceado !as "o#en, fa es el padre de a s es el hi"o de a en la direcci(n del desbalance. KJ imbal7"@e+N@"+a## O %/)%8 if"bal"+a#77*#M JK se le ha agregado otro ni#el al arbol. El arbol per!anece balanceado. KJ "bal"+a##7imbal8 return"q#8 P JJ fin del if if"bal"+a#L7imbal#M /* el nodo agregado se ha colocado en la direccion opuesta del desbalance. El arbol per!anece balanceado. KJ bal"+a#7*8 return "q#8 P JJ fin del if JK PARTE ) el nodo adicional a desbalanceado al arbol. restablecer el balance efectuando la rotacion requerida, a"ustando despues los #alores de balance de los nodos in#olucrados. KJ if"bal"s#77imbal#M JJ a s se han desbalanceado en la !is!a direccion. p7s8 if"imbal77%# rigtrotation"+a#8 else leftrotation"+a#8 bal"s#7*8 bal"s#7*8 P elseM /* a s se encuentran desbalanceados en direcciones opuestas. KJ if"imbal77%#M p7rigt"s#8 leftrotation"s#8 left"+a#7p8 rigtrotation"+a#8 P elseM p7left"s#8 rigt"+a#7p8 rigtrotation"s#8 leftrotation"+a#8 P JJ fin del if JJ a"ustar el ca!po bal para los nodos in#olucrados if"bal"p#77*#M JJ p fue un nodo insertado bal"+a#7*8 bal"s#7*8 P else if"bal"p#77imbal#M bal"+a#7)imbal#M bal"s#7*8 P else bal"+a#7*8 bal"s#7imbal8 P JJ fin de if bal"p#7*8 P JJ fin de if JJ a"ustar el epuntador del subarbol rotado if"f+a77H&LL# tree7p8 else "+a77rigt"f+a## O rigt"f+a#7p/ left"f+a#7p8 return "q#8 P