Sie sind auf Seite 1von 16

SOLUCIONARIO ANEXOS

Gua didctica: Estructura de Datos y Algoritmos II

ANEXOS
El presente material ha sido reproducido con fines netamente didcticos, cuyo objetivo es brindar al estudiante mayores elementos de juicio para la comprensin de la materia, por lo tanto no tiene fin comercial.

ANEXO 1 RBOlES BAlANCEADOS INTRODUCCIN


Aunque las operaciones de bsqueda e insercin de elementos se realizan de una manera eficiente en los rboles de bsqueda binaria, stos resultan ineficientes cuando el rbol crece o decrece descontroladamente, an ms cuando los elementos que ingresamos en el rbol estn ordenados (Ver figura 1), lo que causa un aumento considerable en el nmero de comparaciones que se deben realizar cuando se desea ubicar un determinado elemento

Fig: 1 rbol Binario de Bsqueda Como una solucin a este tipo de problemas, es necesaria la utilizacin de los rboles balanceados, los cuales tienen como objetivo mantener el rbol lo ms equilibrado posible. Estos recurren a diferentes mtodos de ordenamiento de los nodos que lo componen, tratando de ubicar a dichos nodos de una forma que no afecte el balanceo del rbol. El objetivo principal del balanceo es minimizar (optimizar) el nmero de comparaciones a realizar para lograr un mejor tiempo de acceso a sus datos

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

47

Gua didctica: Estructura de Datos y Algoritmos II

ANEXOS

RBOl BINARIO EQUIlIBRADO, RBOlES AVl Los rboles AVL, son rboles ordenados o de bsqueda que adems cumplen las condiciones de balanceo para cada uno de sus nodos. A los nodos normalmente utilizados en los rboles binarios se ha agregado un nuevo campo de tipo entero (Ver Cdigo 1), en el cual se almacenar lo que conoceremos como factor de equilibrio. El valor almacenado en este campo depender directamente de la altura de los subrboles hijos del nodo en el cual nos encontramos, el cual para ser considerado como rbol equilibrado deber estar entre 1 y -1 resultando de la resta de la altura del subrbol derecho menos la altura del subrbol izquierdo. (Ver figura 2) Cdigo 1: Declaracin del nodo struct nodo{ TipoElemento dato; int fe; struct nodo *izdo, *dcho; }; typedef struct nodo Nodo;

Fig: 2 rbol Equilibrado con el factor de equilibrio de cada nodo

INSERCIN La insercin de elementos en este tipo de rboles debe realizarse basndonos en los algoritmos utilizados con los rboles de Bsqueda Binaria, es decir, siguiendo un camino de bsqueda mediante la comparacin de claves. Esta insercin de elementos puede hacer que aumente la altura de una rama de manera que cambie el factor de equilibrio de la raz del subrbol. Este hecho hace necesario que el algoritmo de insercin regrese por el camino de bsqueda actualizando el factor de equilibrio de los nodos. (Ver figura 3) Una nueva insercin o eliminacin de claves, puede destruir el criterio de equilibrio de los nodos del rbol. Se debe restaurar esa condicin de equilibrio antes de dar por finalizada la operacin.

48

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

ANEXOS

Gua didctica: Estructura de Datos y Algoritmos II

Fig: 3 rbol Equilibrado, despus de insertar la clave 17 Pueden existir cuatro casos durante la insercin de un nuevo elemento en el rbol, en los cuales se rompa la condicin de equilibrio y debamos realizar los pasos necesarios para restablecer tal equilibrio: (Ver figura 4) 1. 2. 3. 4. Insercin en el subrbol izquierdo de la rama izquierda de un nodo A Insercin en el subrbol derecho de la rama izquierda de un nodo A Insercin en el subrbol derecho de la rama derecha de un nodo A Insercin en el subrbol izquierdo de la rama derecha de un nodo A

Fig: 4 Cuatro tipos de restructuraciones del equilibrio de un nodo El primer y tercer caso (izquierda-izquierda, derecha-derecha) se resuelven con una rotacin simple. El segundo y cuarto caso (izquierda-derecha, derecha-izquierda) se resuelven con una rotacin doble. La rotacin simple implica a dos nodos, el nodo A con factor de equilibrio igual a 2 y el descendiente derecho o izquierdo segn el caso. En cambio en la rotacin doble, estn implicados los tres nodos, el nodo A, el descendiente izquierdo y el descendiente derecho de este; o bien el caso simtrico. Una restructuracin de los nodos implicados en la violacin del equilibrio, ya sea mediante rotacin simple o doble, hace que se recupere el equilibrio en todo el rbol, por lo cual ya no es necesario seguir analizando los nodos del camino de bsqueda.

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

49

Gua didctica: Estructura de Datos y Algoritmos II

ANEXOS

ROTACIN SIMPlE La rotacin simple resuelve la violacin de equilibrio de un nodo izquierda-izquierda, simtrica a la derecha-derecha. El rbol de la figura 5a tiene el nodo C con factor de equilibrio -1; el rbol de la figura 5b es el resultado de insertar el nodo A. Resulta que ha crecido la altura de la rama izquierda, es un desequilibrio izquierda-izquierda que se resuelve con una rotacin simple, que en este caso se puede denominar rotacin II. La figura 5c es el resultante de la rotacin, en el que el nodo B se ha convertido en la raz, el nodo C su rama derecha y el nodo A continua como rama izquierda. Con estos movimientos el rbol sigue siendo de bsqueda y se equilibra.
1

Fig: 5 Insercin de clave por la izquierda y solucin mediante una rotacin simple II En el caso de que la violacin se realice por la derecha, procederemos a aplicar simplemente una rotacin DD que es la recproca de la que acabamos de analizar. El movimiento de los punteros para realizar la rotacin II se da como podemos ver a continuacin en el siguiente cdigo. Cdigo 2: Movimiento de punteros en la rotacin II n->izdo = n1->dcho n1->dcho = n n = n1 A continuacin podemos observar un ejemplo en el cual debemos realizar una rotacin a la izquierda para restaurar la condicin de equilibrio luego de que esta ha sido rota por la insercin de un nuevo elemento.

Algoritmos y estructuras de datos, una perspectiva en C. Luis Joyanes Aguilar, Ignacio Zahonero Martnez, Primera edicin, Espaa, pg. 463

50

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

ANEXOS

Gua didctica: Estructura de Datos y Algoritmos II

Fig: 6 Rotacin simple a la izquierda en un rbol despus de insertar la clave 5 ROTACIN DOBlE Con los movimientos de punteros que se realizan en la rotacin simple o es posible resolver todos los casos de violacin de criterio de equilibrio. En la figura 7a se observa un rbol de bsqueda desequilibrado, con factores de equilibrio +2, -1 y 0. La figura 7b aplica la rotacin simple, rotacin DD. La nica solucin consiste en subir el nodo 40 como raz del subrbol, como rama izquierda situar al nodo 30 y como rama derecha al nodo 60, la altura del subrbol resultante es la misma que antes de insertar. Se ha realizado una rotacin doble, derecha-izquierda, en la que intervienen los tres nodos.
2

Fig: 7 a) rbol despus de insertar la clave 40, b) Rotacin DD. c) Rotacin doble que resuelve el problema. A continuacin podremos ver un ejemplo en el cual se inserta la clave 60, con lo cual se rompe el equilibrio y hay una alteracin de los factores de equilibrio de los nodos involucrados. Se restablece el equilibrio mediante una rotacin doble, simtrica con respecto al ejemplo anterior como se muestra en la figura 8.

Algoritmos y estructuras de datos, una perspectiva en C. Luis Joyanes Aguilar, Ignacio Zahonero Martnez, Primera edicin, Espaa, pg. 465

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

51

Gua didctica: Estructura de Datos y Algoritmos II

ANEXOS

Fig: 8 a) rbol equilibrado de bsqueda despus de insertar la clave 60. b) Rotacin doble, izquierda derecha. La rotacin doble resuelve dos casos simtricos, se puede denominar rotacin ID y rotacin DI. En la rotacin doble hay que mover los punteros de tres nodos, el nodo padre, el descendiente y el descendiente del descendiente por la rama contraria. El movimiento de los punteros para realizar la rotacin ID se da como podemos ver a continuacin en el siguiente cdigo. Cdigo 3: Movimiento de punteros en la rotacin ID n1->dcho n2->izdo n->izdo n2->dcho n = n2->izdo = n1 = n2->dcho =n = n2

Los factores de equilibrio de los nodos implicados en la rotacin ID depende del factor de equilibrio, antes de la insercin, del nodo apuntado por n2, segn la siguiente tabla. Si n2->fe = -1 n->fe = 1 n1->fe = 0 n2->fe = 0 n2->fe = 0 n->fe = 0 n1->fe = 0 n2->fe = 0 n2->fe = 1 n->fe = 0 n1->fe = -1 n2->fe = 0

Los movimientos de los punteros para realizar la rotacin DI son los siguientes;

52

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

ANEXOS

Gua didctica: Estructura de Datos y Algoritmos II

Cdigo 4: Movimiento de punteros en la rotacin DI n1->izdo n2->dcho n->dcho n2->izdo n = n2->dcho = n1 = n2->izdo =n = n2

Los factores de equilibrio de los nodos implicados en la rotacin DI depende del factor de equilibrio, antes de la insercin, del nodo apuntado por n2, segn la siguiente tabla. Si n2->fe = -1 n->fe = 0 n1->fe = 1 n2->fe = 0 n2->fe = 0 n->fe = 0 n1->fe = 0 n2->fe = 0 n2->fe = 1 n->fe = -1 n1->fe = 0 n2->fe = 0

INSERCIN EN C CON BAlANCEO y ROTACIONES La realizacin en C del proceso de insercin de un nuevo nodo primero utiliza el algoritmo recursivo desarrollado en los rboles de bsqueda. Una vez insertado, se activa u flag (indicador, bandera) si ha crecido en altura para regresar por el camino de bsqueda y determinar los nuevos factores de equilibrio de los nodos que forman el camino que va hacia la raz. Cuando la insercin se ha realizado por la rama izquierda del nodo, la altura crece por la izquierda y, por tanto, disminuye en 1 el factor de equilibrio, en el caso de que la insercin se haga por la rama derecha, el factor de equilibrio aumenta en 1. Si la altura del subrbol no aumenta, el proceso termina. Si se produce un desequilibrio, se realiza la correspondiente rotacin y el proceso termina ya que cualquier rotacin tiene la propiedad de que la altura del subrbol resultante es la misma que antes de la insercin. A continuacin se escribe el cdigo en C de los cuatro tipos de rotaciones y de la operacin de insercin. Cdigo 5: Rotaciones void rotacionII(Nodo** n, Nodo* n1){ (*n)->izdo = n1->dcho; n1->dcho = (*n); if(n1->fe == -1){ (*n)->fe = 0; n1->fe = 0; }else{ (*n)->fe = -1; n1->fe = 1; } (*n) = n1; } void rotacionDD(Nodo** n, Nodo* n1){ (*n)->dcho = n1->izdo; /* actualizacin de los factores de equilibrio*/ /*en la insercin siempre se cumple */

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

53

Gua didctica: Estructura de Datos y Algoritmos II

ANEXOS

n1->izdo = (*n); if(n1->fe == +1){ (*n)->fe = 0; n1->fe = 0; }else{ (*n)->fe = +1; n1->fe = -1; } (*n) = n1; } void rotacionID(Nodo** n, Nodo* n1){ Nodo* n2; n2 = n1->dcho; (*n)->izdo = n2->dcho; n2->dcho = *n; n1->dcho = n2->izdo; n2->izdo = n1; /* actualizacin de los factores de equilibrio*/ if(n2->fe == +1) n1->fe = -1; else n1->fe = 0; if(n2->fe == -1) (*n)->fe = 1; else (*n)->fe = 0; n2->fe = 0; (*n) = n2; } void rotacionDI(Nodo** n, Nodo* n1){ Nodo* n2; n2 = n1->izdo; (*n)->dcho = n2->izdo; n2->izdo = *n; n1->izdo = n2->dcho; n2->dcho = n1; /* actualizacin de los factores de equilibrio*/ if(n2->fe == +1) (*n)->fe = -1; else (*n)->fe = 0; /* actualizacin de los factores de equilibrio*/ /*en la insercin siempre se cumple */

54

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

ANEXOS

Gua didctica: Estructura de Datos y Algoritmos II

if(n2->fe == -1) n1->fe = 1; else n1->fe = 0; n2->fe = 0; (*n) = n2; } Cdigo 6: Insercin con balanceo void insertarEquilibrado(Nodo** raiz, TipoElemento clave, int* h){ Nodo* n1; if(!(*raiz)){ *raz = crearNodo(clave); *h = 1; }else if(clave < (*raiz)->dato){ insertarEquilibrado(&((*raiz)->izdo), clave, h); /* regreso por los nodos del camino*/ if(*h){ /* reduce en 1 el fe al aumentar altura de rama izquierda*/ switch((*raiz)->fe){ case 1: (*raiz)->fe = 0; (*h) = 0; break; case 0: (*raiz)->fe = -1; break; case -1: /* viola el equilibrio, rotacin izquierda*/ n1 = (*raiz)->izdo; if(n1->fe == -1) rotacionII(raz, n1); else rotacionID(raz, n1); (*h) = 0; break; } } }else if(clave > (*raiz)->dato){ insertarEquilibrado(&((*raiz)->dcho), clave, h); /* regreso por los nodos del camino*/ if(*h){ /* incrementa en 1 el fe al aumentar altura de rama derecha*/ switch((*raiz)->fe){ case 1: /* viola el equilibrio, rotacin derecha*/ n1 = (*raiz)->dcho; if(n1->fe == +1) rotacionDD(raz, n1); else rotacionDI(raz, n1); (*h) = 0; break;
UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

55

Gua didctica: Estructura de Datos y Algoritmos II

ANEXOS

case 0: (*raiz)->fe = +1; break; case -1: (*h) = 0; break; } } }else{ puts(En rboles de bsqueda o puede haber claves repetidas.); (*h) = 0; } } ElIMINACIN DE UN NODO EN UN RBOl EQUIlIBRADO El algoritmo de eliminacin puede descomponerse en dos partes diferenciadas. La primera sigue la estrategia de la eliminacin en rboles de bsqueda. La segunda es la actualizacin del factor de equilibrio, para lo que recorre el camino de bsqueda hacia la raz, actualizando el factor de equilibrio de los nodos. Con la eliminacin, la altura de la rama en que se encuentra el nodo disminuye en 1. Si despus de la actualizacin de u nodo ocurre que se viola la condicin de equilibrio, el fe = 2, hay que restaurar el equilibrio con una rotacin simple o doble. En la figura 9a se muestra el rbol equilibrado con el factor de equilibrio de cada nodo, en la figura b el rbol luego de eliminar la clave 15, al actualizar el factor de equilibrio del nodo 28 pasa a valer +2 ya que se ha eliminado por su rama izquierda, hay que restablecer el equilibrio con una rotacin, en este caso con una rotacin doble.

Fig: 9 a) rbol de bsqueda equilibrado. b) Despus de eliminar la clave 15 y actualizar los factores de equilibrio.

56

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

ANEXOS

Gua didctica: Estructura de Datos y Algoritmos II

Algoritmo para eliminar un nodo en un rbol equilibrado

Una vez localizado el nodo a eliminar, podemos distinguir dos casos para su eliminacin. 1. 2. El nodo a borrar es un nodo hoja, o con un nico descendiente. Entonces simplemente se suprime, o bien se sustituye por su descendiente. El nodo a eliminar tiene dos subrboles. En este caso se busca el nodo mas a la derecha del subrbol izquierdo, es decir, el de mayor clave en el subrbol de los menores, se copia este en el nodo a eliminar y por ltimo se elimina el nodo copiado (que tiene las caractersticas del caso primero).

Fig: 10 a) rbol de bsqueda equilibrado. b) rbol despus de eliminar el nodo 90. Una vez eliminado el nodo, el algoritmo tiene que prever actualizar los factores de equilibrio de los nodos que han formado el camino de bsqueda ya que la altura de alguna de las dos ramas ha decrecido. Por consiguiente, regresa por el camino de bsqueda, hacia la raz, calculado los nuevos factores de equilibrio de los nodos visitados. No siempre es necesario recorrer todo el camino de regreso, si se actualiza un nodo con factor de equilibrio 0, el nuevo ser 1, pero la altura neta del subrbol co raz el nodo actualizado no ha cambiado, entonces el algoritmo termina ya que los factores de equilibrio de los nodos restantes no cambia. La figura 10a muestra el rbol equilibrado, en la figura 10b el rbol resultante despus de eliminar el nodo con la clave 90, al volver por el camino de bsqueda el nodo 70 su factor de equilibrio pasa a ser 0, el nodo 60 tiene como factor 0 se actualiza y pasa a ser -1, su altura neta no ha cambiado, sigue siendo 3, por lo que el algoritmo termina. Otro caso a considerar en la parte de actualizacin es que un nodo tenga como fe=1, y la eliminacin se haya hecho por la rama ms alta, entonces el equilibrio mejora, pasa a ser cero. Ahora bien, en este caso la altura del subrbol a disminuido, por lo que el algoritmo debe seguir retrocediendo por los nodos por si es necesario una restructuracin. En la figura 11b se tiene el rbol de bsqueda despus de eliminar el nodo con la clave 25 del rbol. Al actualizar los nodos del camino de bsqueda, el nodo 20 tiene como fe = +1, ste pasa a ser 0 ya que se ha eliminado por la rama derecha. El proceso continua ya que la altura del subrbol de raz 20 a disminuido, el nodo antecesor, 29, tiene como fe=+1, ste pasa a ser +2 ya que se ha eliminado por su rama izquierda, viola la condicin de equilibrio. Para restaurar el equilibrio es necesario, en este caso, una rotacin simple, derecha-derecha, ya que el
3 Algoritmos y estructuras de datos, una perspectiva en C. Luis Joyanes Aguilar, Ignacio Zahonero Martnez, Primera edicin, Espaa, pg. 473

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

57

Gua didctica: Estructura de Datos y Algoritmos II

ANEXOS

nodo de la rama derecha de 29 tiene como fe=0. La figura 11c es el rbol equilibrado despus de la rotacin. Los nodos que tienen como fe = 1, al actualizar el factor de equilibrio ste puede pasar a 2, hay que reestructurarlos con una rotacin simple o doble. El tipo concreto de rotacin depende del fe del nodo problema, apuntado por n, y del nodo descendiente n1:

Fig: 11 a) rbol de bsqueda equilibrado. b) rbol despus de eliminar el nodo 25. c) rbol una vez realizada la rotacin derecha-derecha Si n->fe = +2, entonces n1 es el hijo derecho (n1 = n->dcho) de tal forma que si n1>fe 0 la rotacin aplicar es derecha-derecha. Y si n1->fe == -1, la rotacin aplicar es derecha-izquierda. De forma simtica, si n1->fe==-2, entonces n1 es el hijo izquierdo (n1=n->izdo) de tal forma que si n1->fe 0 la rotacin a aplicar es izquierda-izquierda. Y si n1->fe == +1, la rotacin a aplicar es izquierda-derecha.

En el proceso de eliminar una clave una vez que se aplica una rotacin para restablecer el equilibrio de un nodo, la altura del subrbol puede ser que haya disminuido por lo que el proceso de actualizacin del fe debe continuar; puede ocurrir que otro nodo del camino hacia la raz viole la condicin de equilibrio y sea necesario aplicar otra rotacin. La figura 12b es un rbol de bsqueda despus de haber eliminado la clave 21, y con la actualizacin de los factores de equilibrio, el nodo 43 est desequilibrado, hay que aplicar una rotacin derecha-derecha. La figura 12c muestra el rbol despus de la rotacin y la posterior actualizacin del factor de equilibrio del nodo 70, que tambin exije aplicar otra rotacin, en este caso derecha-izquierda. La figura 12d es el rbol equilibrado despus de la rotacin y fin del algoritmo.

58

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

ANEXOS

Gua didctica: Estructura de Datos y Algoritmos II

El algoritmo de eliminacin de una clave en un rbol de bsqueda AVL puede necesitar aplicar ms de una rotacin para que el rbol resultante siga siendo equilibrado.

Fig: 12 a) rbol de bsqueda equilibrado. b) rbol despus de eliminar el nodo 21. c) rbol una vez realizada la rotacin derecha-derecha. d) rbol despus de la nueva rotacin, derecha-izquierda La funcin que implementa la operacin de eliminacin requiere utilizar un argumento lgico para indicar que se ha producido un cambio en la altura de una rama. Entonces el parmetro cambiaAltura se va a activar cuando la altura del subrbol disminuya, debido a la eliminacin de un nodo, o bien porque al aplicar las rotaciones se haya reducido la altura del subrbol. Adems para aislar el proceso de los diferentes casos que ocurren cuando disminuye la altura se introducen dos funciones, equilibrar1() y equilibrar2(). La primera se nvoca cuando la altura de la rama izquierda ha disminuido y, de forma simtrica, equilibrar2() se invoca cuando la altura de la rama derecha es la que disminuye. En equilibrar1(), al disminuir la altura de la rama izquierda, el factor de equilibrio se incrementa en 1, por lo que de violarse el factor de equilibrio la rotacin que se aplica para equilibrar el nodo es del tipo derecha-derecha o derecha-izquierda. Y de forma simtrica, en equilibrar2(), al disminuir la altura de la rama derecha, el factor de equilibrio disminuye en 1, por lo que de violarse el factor de equilibrio la rotacin que se aplica para equilibrar el nodo es del tipo izquierda-izquierda o izquierda-derecha.

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

59

Gua didctica: Estructura de Datos y Algoritmos II

ANEXOS

Cdigo 7: Operaciones de eliminacin en un rbol equilibrado void borrarBalanceado(Nodo** raiz, TipoElemento clave, int* cambiaAltura){ if(!(*raiz)){ puts(!! Nodo no encontrado !!); *cambiaAltura = 0; }else if(clave < (*raiz)->dato){ borrarBalanceado(&((*raiz)->izdo), clave, cambiaAltura); if(*cambiaAltura) equilibrar1(raz, cambiaAltura); }else if(clave > (*raiz)->dato){ borrarBalanceado(&((*raiz)->dcho), clave, cambiaAltura); if(*cambiaAltura) equilibrar2(raz, cambiaAltura); }else{ /* Nodo Encontrado*/ Nodo* q; /* Puntero al nodo a suprimir*/ q = (*raiz); if(q->izdo == NULL){ (*raiz) = q->dcho; *cambiaAltura = 1; }else if(q->dcho == NULL){ (*raiz) = q->izdo; *cambiaAltura = 1; }else{ /* tiene rama izquierda y derecha*/ reemplazar(&q, &(q->izdo), cambiaAltura); if(*cambiaAltura) equilibrar1(raz, cambiaAltura); } free(q); } } void reemplazar(Nodo** n, Nodo** act, int *cambiaAltura){ if((*act)->dcho){ reemplazar(n, &((*act)->dcho), cambiaAltura); if(*cambiaAltura) equilibrar2(act, cambiaAltura); }else{ (*n)->dato = (*act)->dato; (*n) = *act; (*act) = (*act)->izdo; *cambiaAltura = 1; } } void equilibrar1(Nodo** n, int* cambiaAltura){ Nodo* n1; switch ((*n)->fe){ case -1: (*n)->fe = 0; break;

60

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

ANEXOS

Gua didctica: Estructura de Datos y Algoritmos II

case 0: (*n)->fe = 1; *cambiaAltura = 0; break; case +1: /*Es necesario aplicar un tipo de rotacin derecha*/ n1 = (*n)->dcho; if(n1->fe >= 0){ if(n1->fe == 0) /*altura no vuelve a disminuir*/ *cambiaAltura = 0; rotacionDD(n, n1); }else rotacinDI(n, n1) break; } } void equilibrar2(Nodo** n, int* cambiaAltura){ Nodo* n1; switch ((*n)->fe){ case -1: /*Se aplica un tipo de rotacin izquierda*/ n1 = (*n)->izdo; if(n1->fe <= 0){ if(n1->fe == 0) *cambiaAltura = 0; rotacionII(n, n1); }else rotacinID(n, n1) break; case 0: (*n)->fe = -1; *cambiaAltura = 0; break; case +1: (*n)->fe = 0; break; } }

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

61

Gua didctica: Estructura de Datos y Algoritmos II

ANEXOS

ANEXO 2 RBOlES B
INTRODUCCIN
4

Aunque los rboles-B son rboles de bsqueda, la B no significa binario, ya que: Los rboles-B nunca son binarios. Y tampoco es porque sean rboles de bsqueda, ya que en ingls se denominan B-trees. Tampoco es porque sean balanceados, ya que no suelen serlo.

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es su algoritmo. Los rboles B a menudo son utilizados para evitar los inconvenientes que encontramos cuando trabajamos con rboles binarios de bsqueda, sobre todo cuando se ordenan ficheros, por lo cual se han convertido en el sistema de indexacin ms utilizado. RBOlES B En primer lugar al hablar de un rbol de orden m, estamos hablando del mximo nmero de enlaces que puede tener un nodo, as mismo dicho nodo solamente podr tener un mximo de m-1 claves o campos de informacin. En este caso nosotros haremos ejercicios con un rbol de orden cinco con cuatro claves o campos de informacin (Ver figura 1). Campos de informacin

Enlaces

Fig: 1 Nodo para un rbol B de orden 5 As mismo: Los rboles B, siempre estn perfectamente equilibrados. Todos los nodos, excepto la raz, deben tener entre m/2 y todos los elementos de informacin ocupados, es decir en nuestro ejemplo cada nodo debe tener por lo menos dos campos de informacin ocupados y mximo cuatro. La raz es el nico nodo que puede tener entre 1 y el total de campos de informacin ocupados, es decir en nuestro ejemplo entre uno y cuatro. Todas las hojas o nodos terminales deben estar al mismo nivel.

http://articulos.conclase.net/arboles-b/index.html

62

UNIVERSIDAD TCNICA PARTICULAR DE LOJA La Universidad Catlica de Loja

Das könnte Ihnen auch gefallen