Vous êtes sur la page 1sur 13

rbol-B

Ejemplo de rbol B. En las ciencias de la computacin, los rboles-B o B-rboles son estructuras de datos de rbol que se encuentran comnmente en las implementaciones de bases de datos y sistemas de archivos. Son rboles balanceados de bsqueda en los cuales cada nodo puede poseer ms de dos hijos.1 Los rboles B mantienen los datos ordenados y las inserciones y eliminaciones se realizan en tiempo logartmico amortizado.

ndice
1 Definicin 2 Definicin tcnica 3 Altura: El mejor y el peor caso 4 Estructura de los nodos 5 Algoritmos o 5.1 Bsqueda o 5.2 Insercin o 5.3 Eliminacin 5.3.1 Eliminacin en un nodo hoja 5.3.2 Eliminacin en un nodo interno o 5.4 Rebalanceo despus de la eliminacin o 5.5 Construccin Inicial 6 Notas o 6.1 Multi-modo:combinar y dividir o 6.2 Relacin entre U y L o 6.3 Acceso concurrente 7 Vase tambin 8 Referencias 9 Enlaces externos

Definicin
La idea tras los rboles-B es que los nodos internos deben tener un nmero variable de nodos hijo dentro de un rango predefinido. Cuando se inserta o se

elimina un dato de la estructura, la cantidad de nodos hijo vara dentro de un nodo. Para que siga mantenindose el nmero de nodos dentro del rango predefinido, los nodos internos se juntan o se parten. Dado que se permite un rango variable de nodos hijo, los rboles-B no necesitan rebalancearse tan frecuentemente como los rboles binarios de bsqueda auto-balanceables, pero por otro lado pueden desperdiciar memoria, porque los nodos no permanecen totalmente ocupados. Los lmites una superior e inferior en el nmero de nodos hijo son definidos para cada implementacin en particular. Por ejemplo, en un rbol-B 2-3 (A menudo simplemente llamado rbol 2-3 ), cada nodo slo puede tener 2 3 nodos hijo. Un rbol-B se mantiene balanceado porque requiere que todos los nodos hoja se encuentren a la misma altura. Los rboles B tienen ventajas sustanciales sobre otras implementaciones cuando el tiempo de acceso a los nodos excede al tiempo de acceso entre nodos. Este caso se da usualmente cuando los nodos se encuentran en dispositivos de almacenamiento secundario como los discos rgidos. Al maximizar el nmero de nodos hijo de cada nodo interno, la altura del rbol decrece, las operaciones para balancearlo se reducen, y aumenta la eficiencia. Usualmente este valor se coloca de forma tal que cada nodo ocupe un bloque de disco, o un tamao anlogo en el dispositivo. Mientras que los rboles B 2-3 pueden ser tiles en la memoria principal, y adems ms fciles de explicar, si el tamao de los nodos se ajustan para caber en un bloque de disco, el resultado puede ser un rbol B 129-513. Los creadores del rbol B, Rudolf Bayer y Ed McCreight, no han explicado el significado de la letra B de su nombre. Se cree que la B es de balanceado, dado que todos los nodos hoja se mantienen al mismo nivel en el rbol. La B tambin puede referirse a Bayer, o a Boeing, porque sus creadores trabajaban en los Boeing Scientific Research Labs por ese entonces.

Definicin tcnica
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. 2. 3. 4. 5. 6. Cada nodo tiene como mximo M hijos. Cada nodo (excepto raz y hojas) tiene como mnimo (M+1)/2 claves. La raz tiene al menos 2 hijos si no es un nodo hoja. Todos los nodos hoja aparecen al mismo nivel. Un nodo no hoja con k hijos contiene k-1 elementos almacenados. 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.

Altura: El mejor y el peor caso


En el mejor de los casos,la altura de un rbol-B es:

En el peor de los casos,la altura de un rbol-B es:

Donde M es el nmero mximo de hijos que puede tener un nodo.

Estructura de los nodos


Cada elemento de un nodo interno acta como un valor separador, que lo divide en subrboles. Por ejemplo, si un nodo interno tiene tres nodos hijo, debe tener dos valores separadores o elementos a1 y a2. Todos los valores del subrbol izquierdo deben ser menores a a1, todos los valores del subrbol del centro deben estar entre a1 y a2, y todos los valores del subrbol derecho deben ser mayores a a2. Los nodos internos de un rbol B, es decir los nodos que no son hoja, usualmente se representan como un conjunto ordenado de elementos y punteros a los hijos. Cada nodo interno contiene un mximo de U hijos y, con excepcin del nodo raz, un mnimo de L hijos. Para todos los nodos internos exceptuando la raz, el nmero de elementos es uno menos que el nmero de punteros a nodos. El nmero de elementos se encuentra entre L-1 y U-1. El nmero U debe ser 2L o 2L-1, es decir, cada nodo interno est por lo menos a medio llenar. Esta relacin entre U y L implica que dos nodos que estn a medio llenar pueden juntarse para formar un nodo legal, y un nodo lleno puede dividirse en dos nodos legales (si es que hay lugar para subir un elemento al nodo padre). Estas propiedades hacen posible que el rbol B se ajuste para preservar sus propiedades ante la insercin y eliminacin de elementos. Los nodos hoja tienen la misma restriccin sobre el nmero de elementos, pero no tienen hijos, y por tanto carecen de punteros. El nodo raz tiene lmite superior de nmero de hijos, pero no tiene lmite inferior. Por ejemplo, si hubiera menos de L-1 elementos en todo el rbol, la raz sera el nico nodo del rbol, y no tendra hijos. Un rbol B de altura n+1 puede contener U veces por elementos ms que un rbol B de profundidad n, pero el costo en la bsqueda, insercin y eliminacin crece con la altura del rbol. Como todo rbol balanceado, el crecimiento del costo es ms lento que el del nmero de elementos. Algunos rboles balanceados guardan valores slo en los nodos hoja, y por lo tanto sus nodos internos y nodos hoja son de diferente tipo. Los rboles B guardan valores en cada nodo, y pueden utilizar la misma estructura para todos los nodos.

Sin embargo, como los nodos hoja no tienen hijos, una estructura especial para stos mejora el funcionamiento. Class nodo rbol B en c++
#define TAMANO 1000 struct stclave { int valor; long registro; }; class bnodo { public: bnodo (int nClaves); // Constructor ~bnodo (); // Destructor private: int clavesUsadas; stclave *clave; bnodo **puntero; bnodo *padre; friend class btree; };

Algoritmos
Bsqueda
La bsqueda es similar a la de los rboles binarios. Se empieza en la raz, y se recorre el rbol hacia abajo, escogiendo el sub-nodo de acuerdo a la posicin relativa del valor buscado respecto a los valores de cada nodo. Tpicamente se utiliza la bsqueda binaria para determinar esta posicin relativa. Procedimiento

ejemplo2 insercin en rbol B. 1. Situarse en el nodo raz. 2. (*) Comprobar si contiene la clave a buscar. 1. Encontrada fin de procedimiento. 2. No encontrada: 1. Si es hoja no existe la clave. 2. En otro caso el nodo actual es el hijo que corresponde: 1. La clave a buscar k < k1: hijo izquierdo. 2. La clave a buscar k > ki y k < ki+1 hijo isimo. 3. Volver a paso 2(*).

Insercin
Todas las inserciones se hacen en los nodos hoja. 1. Realizando una bsqueda en el rbol, se halla el nodo hoja en el cual debera ubicarse el nuevo elemento.

2. Si el nodo hoja tiene menos elementos que el mximo nmero de elementos legales, entonces hay lugar para uno ms. Inserte el nuevo elemento en el nodo, respetando el orden de los elementos. 3. De otra forma, el nodo debe ser dividido en dos nodos. La divisin se realiza de la siguiente manera: 1. Se escoge el valor medio entre los elementos del nodo y el nuevo elemento. 2. Los valores menores que el valor medio se colocan en el nuevo nodo izquierdo, y los valores mayores que el valor medio se colocan en el nuevo nodo derecho; el valor medio acta como valor separador. 3. El valor separador se debe colocar en el nodo padre, lo que puede provocar que el padre sea dividido en dos, y as sucesivamente. Si las divisiones de nodos suben hasta la raz, se crea una nueva raz con un nico elemento como valor separador, y dos hijos. Es por esto por lo que la cota inferior del tamao de los nodos no se aplica a la raz. El mximo nmero de elementos por nodo es U-1. As que debe ser posible dividir el nmero mximo de elementos U-1 en dos nodos legales. Si este nmero fuera impar, entonces U=2L, y cada uno de los nuevos nodos tendran (U-2)/2 = L-1 elementos, y por lo tanto seran nodos legales. Si U-1 fuera par, U=2L-1, as que habra 2L-2 elementos en el nodo. La mitad de este nmero es L-1, que es el nmero mnimo de elementos permitidos por nodo. Un algoritmo mejorado admite una sola pasada por el rbol desde la raz,hasta el nodo donde la insercin tenga lugar,dividiendo todos los nodos que estn llenos encontrados a su paso.Esto evita el costo de volver a cargar en memoria los nodos padres (lo que puede llegar a ser caro si los nodos se encuentran en una memoria secundaria). Sin embargo,para usar este algoritmo mejorado, debemos ser capaces de enviar un elemento al nodo padre y dividir el resto U-2 elementos en 2 nodos legales,sin aadir un nuevo elemento.Esto requiere que U=2L en lugar de U=L-1,lo que explica por qu algunos libros de texto imponen este requisito en la definicin de rboles-B.

Eliminacin
rse sin necesidad de continuar reestructurando Se pueden dar dos problemas al eliminar elementos: primero, el elemento puede ser un separador de un nodo interno. Segu Eliminacin en un nodo hoja Busque el valor a eliminar. Si el valor se encuentra en un nodo hoja, se elimina directamente la clave, posiblemente dejndolo con muy pocos elementos; por lo que se requerirn cambios adicionales en el rbol.

eliminar clave 20 de un nodo interno. Eliminacin en un nodo interno (recursivamente) del nuevo nodillo. En el segundo caso, uno de los dos nodos hijos tienen un nmero de elementos mayor que el mnimo. Entoncesizquierdo o el menor elemento dr el nuevo separador. Como se ha eliminado un elemento de un nodo hoja, se tar este caso de manera equivalente.

Rebalanceo despus de la eliminacin


Si al eliminar un elemento de un nodo hoja el nodo se ha quedado con menos elementos que el mnimo permitido, algunos elementos se deben redistribuir. En algunos casos el cambio lleva la deficiencia al nodo padre, y la redistribucin se debe aplicar iterativamente hacia arriba del rbol, quiz incluso hasta a la raz. Dado que la cota mnima en el nmero de elementos no se aplica a la raz, el problema desaparece cuando llega a sta.

Construccin Inicial
En aplicaciones, es frecuentemente til construir un rbol-B para representar un gran nmero de datos existentes y despus actualizarlo de forma creciente usando operaciones estndar de los rboles-B. En este caso, el modo ms eficiente para construir el rbol-B inicial no sera insertar todos los elementos en el conjunto

inicial sucesivamente, si no construir el conjunto inicial de nodos hoja directamente desde la entrada, y despus construir los nodos internos a partir de este conjunto. Inicialmente, todas las hojas excepto la ltima tienen un elemento ms, el cual ser utilizado para construir los nodos internos. Por ejemplo, si los nodos hoja tienen un tamao mximo de 4 y el conjunto inicial es de enteros desde el 1 al 24, tenemos que construir inicialmente 5 nodos hoja conteniendo 5 valores cada uno (excepto el ltimo que contiene 4): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Construiremos el siguiente nivel hacia arriba desde las hojas tomando el ltimo elemento de cada hoja excepto el ltimo. De nuevo, cada nodo excepto el ltimo contendr un valor ms. En el ejemplo, es supuesto que los nodos internos contienen como mucho 2 valores (por lo que pueden tener 3 hijos). Luego el siguiente nivel de nodos internos nos quedara de la siguiente manera: 5 10 15 20 1 2 3 4 6 7 8 9 11 12 13 14 16 17 18 19 21 22 23 24 Este proceso se continuar hasta que alcancemos un nivel con un solo nodo y no esta sobrecargado. En nuestro ejemplo solo nos quedara el nivel de la raz: 15 5 10 20 1 2 3 4 6 7 8 9 11 12 13 14 16 17 18 19 21 22 23 24

Notas
Cada nodo tendr siempre entre L y U hijos incluidos con una excepcin: El nodo raz debe tener entre 2 y U hijos. En otras palabras, la raz est exenta de la restriccin del lmite inferior. Esto permite al rbol sostener un pequeo nmero de elementos. Un nodo raz con un solo hijo no tendra sentido, ya que podramos aadrselo a la raz. Un nodo raz sin hijos es tambin innecesario, ya que un rbol sin hijos se suele representar sin raz.

Multi-modo:combinar y dividir
Es posible modificar el algoritmo anterior, cuando tratamos de encontrar ms elementos para un nodo al que le faltan, examinamos a los hermanos, y si alguno tiene ms del valor mnimo de nmeros, reordenamos los valores de los hermanos de un extremo a otro para rellenar al mnimo el nodo al que le faltan. De la misma manera, cuando un nodo se divide, los elementos extra pueden ser movidos cerca, por ejemplo a hermanos menos poblados; o la divisin puede dar lugar a un nmero de hermanos, redistribuyendo los elementos entre ellos en lugar de dividir un nodo.

En la prctica, el uso ms comn de los rboles-B implica mantener los nodos una memoria secundaria, donde ser lento acceder a un nodo que no haya sido usado con anterioridad. Utilizando solo divisiones y combinaciones, disminuimos el nmero de nodos que se necesitan para la mayora de situaciones comunes, pero podran ser tiles en otras.

Relacin entre U y L
Es casi universal el dividir nodos eligiendo un elemento medio y creando dos nuevos nodos. Esto limita la relacin entre L y U. Si intentamos insertar un elemento dentro de un nodo con U elementos, esto conlleva una redistribucin de U elementos. Uno de estos, el intermedio, ser trasladado al nodo padre, y los restantes sern divididos equitativamente, en la medida de lo posible, entre los dos nuevos nodos. Por ejemplo, en un rbol-B 2-3, aadiendo un elemento a un nodo que ya contiene 3 hijos, y por consiguiente 2 valores separadores (padres), da lugar a 3 valores (los dos separadores y el nuevo valor). El valor medio se convierte en el nuevo separador (padre), y los otros valores se hacen independientes y con 2 hijos. Por lo general, si U es impar, cada uno de los nuevos nodos tienen (U+2)/2 hijos. Si U es par, unos tiene U/2 hijos y el otro U/2+1. Si un nodo est completo y se divide exactamente en 2 nodos, L debe tener un tamao permitido, lo suficiente pequeo, una vez q el nodo ha sido divido. Tambin es posible dividir nodos completos en ms de dos nodos nuevos. Eligiendo dividir un nodo en ms de 2 nodos nuevos requerir un valor ms pequeo para L para el mismo valor de U. Como L se hace ms pequeo, esto permite que haya ms espacio sin usar en los nodos. Esto disminuir la frecuencia de divisin de nodos, pero de la misma manera aumentar la cantidad de memoria que se necesita para almacenar el mismo nmero de valores, y el nmero de nodos que tienen que ser examinados para una operacin particular.

Acceso concurrente
Lehman y Yao nos mostraron que uniendo los bloques de rboles en cada nivel, con un puntero al siguiente nivel, en una estructura de rbol, donde los permisos de lectura de los bloques del rbol se pueden evitar, por que el rbol desciende desde la raz hasta las hojas por bsqueda e insercin. Los permisos de escritura solo se requieren cuando un bloque del rbol es modificado. Minimizando los permisos a un nodo colgante simple, solo durante su modificacin ayuda a maximizar el acceso concurrente por mltiples usuarios. Un dato a ser considerado en las bases de datos, por ejemplo y/o otro rbol basado en ISAM (Mtodos Indexados de Acceso Secuencial) mtodos de almacenamiento.

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.

Arboles B+
Los arboles B+ son una variante de los arboles B, se diferencian en que los arboles B+ toda la informacion se encuentra almacenada en las hojas . En la raiz y en las paginas internas se encuentran almacenado indices o claves para llegar a un dato. Principales caracteristicas de los arboles B+ de orden m son: -La raiz almacena como minimo un dato y como maximo m-1 datos. -La pagina raiz tiene como minimo dos decendientes. -Las paginas intermedias tienen como minimo (m-1)/2(Parte entera ) datos. -Las paginas intermedias tienen como maximo m-1 datos. -Todas las paginas hojas tienen la misma altura -La informacion se encuentra ordenada. -Toda la informacion se encuentra almacenada en las paginas hoja, por lo que en las paginas internas se puede duplicar la claves. Ejemplo de un arbol B+ de orden 5:

Inserccion en un arbol B+: La inserccion en un arbol B+ es similar a la del arbol B se diferencia en el momento que una pagina deja de cumplir la condicion del numero de datos almacenados. Para realizarla se debe subir una copia de la clave mediana de los datos del nodo a la pagina padre, solo se duplica la informacion cuando la clave que sube es de una pagina hoja. Los pasos a seguir para una insercion son los siguientes: 1.Se ubica en la pagina raiz. 2.Se evalua si es una pagina hoja

2.1.Si la respuesta es afirmativa, se evalua si no sobrepasa los limites de datos. 2.1.1.Si la respuesta es afirmativa, entonces se procede a insertar el nuevo valor en lugar del correspondiente. 2.1.2.Si la respuesta es negativa, se divide la pagina en dos, se sube una copia de la mediana a la pagina padre, si la pagina padre se encuentra llena se debe de partir igual y asi el mismo proceso hasta donde sea necesario, si este proceso llega hasta la raiz la altura del arbol aumenta en uno. 2.2. si no es hoja, se compara el elemento a insertar con con cada uno de los valores almacenados para encontrar la pagina decendiente donde proseguir la busqueda. Se regresa al paso 1. Ejemplo de insercion: -Insertar las siguientes claves a un arbol de orden 5: 10-27-29-17-25-21-15-31-1351-20-24-48-19-60-35-66

Eliminacion: La operacin de eliminacin en rboles-B+ es mas simple que en rboles-B. Esto ocurre porque las claves a eliminar siempre se encuentran en las paginas hojas. En general deben distinguirse los siguientes casos: 1. Si al eliminar una clave, la cantidad de llaves queda mayor o igual que [m/2] entonces termina la operacin. Las claves de los nodos raz o internos

no se modifican por ms que sean una copia de la clave eliminada en las hojas. 2. Si al eliminar una clave, la cantidad de llaves queda menor que [m/2] entonces debe realizarse una redistribucin de claves, tanto en el ndice como en las paginas hojas. Ejemplo del caso 1:

Ejemplo del caso 2:

Ejercicios: 1. Crear un arbol de orden 5 con las siguientes entradas: 25,32,11,10,20,41,53,62,45 2. Del ejercicio anterior eliminar las claves 45 y 52.

Referencias: http://es.wikipedia.org/wiki/%C3%81rbol-B http://es.wikipedia.org/wiki/%C3%81rbol-B* http://dicyg.fi-c.unam.mx:8080/lalo/aed-teo/presentaciones/Tema4.pdf http://wwwdi.ujaen.es/asignaturas/eedd2/tema6.pdf https://sites.google.com/site/tutoriasarboles/arboles-b-y-b http://www.google.com.mx/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&ved=0CE0QFjA G&url=http%3A%2F%2Forganizacion.googlecode.com%2Fsvn%2Ftrunk%2FApuntes%2FOrga nizacion%2520de%2520Archivos%2FArboles%2520B.pdf&ei=b9iHUZGmFaS30gH54YHYBA&u sg=AFQjCNHW9kT752Z4wHKboDfcKmjP-JOIRw&bvm=bv.45960087,d.dmQ&cad=rja http://www.google.com.mx/url?sa=t&rct=j&q=&esrc=s&source=web&cd=20&ved=0CF8QFj AJOAo&url=http%3A%2F%2Fwww.sanchezcrespo.org%2FDocencia%2FED%2Ftransparencias -arboles08-09.ppt&ei=utqHUdCuDrS30gGX0IHADQ&usg=AFQjCNFcFV9fb3m8Y94KYvCIFsIAm9azg&bvm=bv.45960087,d.dmQ

Vous aimerez peut-être aussi