fbpx
Wikipedia

Árbol-B

En las ciencias de la computación, los árboles-B o B-árboles son estructuras de datos de árbol que se encuentran comúnmente en las implementaciones de bases de datos y sistemas de archivos. Al igual que los árboles binarios de búsqueda, son árboles balanceados de búsqueda, pero cada nodo puede poseer más de dos hijos.[1]​ Los árboles B mantienen los datos ordenados y las inserciones y eliminaciones se realizan en tiempo logarítmico amortizado.

Archivo:B-tre example.svg
Ejemplo de árbol B.

Definición

La idea tras los árboles-B es que los nodos internos deben tener un número 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 varía dentro de un nodo. Para que siga manteniéndose el número 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 búsqueda auto-balanceables. Pero, por otro lado, pueden desperdiciar memoria, porque los nodos no permanecen totalmente ocupados. Los límites (uno superior y otro inferior) en el número de nodos hijo son definidos para cada implementación en particular. Por ejemplo, en un árbol-B 2-3 (A menudo simplemente llamado árbol 2-3 ), cada nodo sólo puede tener 2 o 3 nodos hijos.

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 rígidos. Al maximizar el número 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 tamaño análogo en el dispositivo. Mientras que los árboles B 2-3 pueden ser útiles en la memoria principal, y además más fáciles de explicar, si el tamaño de los nodos se ajusta 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 también puede referirse a Bayer, o a Boeing, porque sus creadores trabajaban en los Boeing Scientific Research Labs por ese entonces.

Definición técnica

B-árbol es un árbol de búsqueda que puede estar vacío o aquel cuyos nodos pueden tener varios hijos, existiendo una relación de orden entre ellos, tal como muestra el dibujo.

Un árbol-B de orden M (el máximo número de hijos que puede tener cada nodo) es un árbol que satisface las siguientes propiedades:

  1. Cada nodo tiene como máximo M hijos.
  2. Cada nodo (excepto raíz) tiene como mínimo (M)/2 claves.
  3. La raíz tiene al menos 2 hijos si no es un nodo hoja. (según M)
  4. Todos los nodos hoja aparecen al mismo nivel.
  5. Un nodo no hoja con k hijos contiene k-1 elementos almacenados.
  6. Los hijos que cuelgan de la raíz (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 número máximo de hijos que puede tener un nodo.

Estructura de los nodos

Cada elemento de un nodo interno actúa como un valor separador, que lo divide en subárboles. Por ejemplo, si un nodo interno tiene tres nodos hijo, debe tener dos valores separadores o elementos a1 y a2. Todos los valores del subárbol izquierdo deben ser menores a a1, todos los valores del subárbol del centro deben estar entre a1 y a2, y todos los valores del subárbol 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 máximo de U hijos y, con excepción del nodo raíz, un mínimo de L hijos. Para todos los nodos internos exceptuando la raíz, el número de elementos es uno menos que el número de punteros a nodos. El número de elementos se encuentra entre L-1 y U-1. El número U debe ser 2L o 2L-1, es decir, cada nodo interno está por lo menos a medio llenar. Esta relación entre U y L implica que dos nodos que están 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 inserción y eliminación de elementos.

Los nodos hoja tienen la misma restricción sobre el número de elementos, pero no tienen hijos, y por tanto carecen de punteros.

El nodo raíz tiene límite superior de número de hijos, pero no tiene límite inferior. Por ejemplo, si hubiera menos de L-1 elementos en todo el árbol, la raíz sería el único nodo del árbol, y no tendría hijos.

Un árbol B de altura n+1 puede contener U veces por elementos más que un árbol B de profundidad n, pero el costo en la búsqueda, inserción y eliminación crece con la altura del árbol. Como todo árbol balanceado, el crecimiento del costo es más lento que el del número de elementos.

Algunos árboles balanceados guardan valores sólo 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 estos 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

Búsqueda

La búsqueda es similar a la de los árboles binarios. Se empieza en la raíz, y se recorre el árbol hacia abajo, escogiendo el sub-nodo de acuerdo a la posición relativa del valor buscado respecto a los valores de cada nodo. Típicamente se utiliza la búsqueda binaria para determinar esta posición relativa.

Procedimiento
 
ejemplo2 inserción en árbol B.
  1. Situarse en el nodo raíz.
  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 iésimo.
        3. Volver a paso 2(*).

Inserción

Las inserciones se hacen en los nodos hoja.

  1. Realizando una búsqueda en el árbol, se halla el nodo hoja en el cual debería ubicarse el nuevo elemento.
  2. Si el nodo hoja tiene menos elementos que el máximo número de elementos legales, entonces hay lugar para uno más. 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 división 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 actúa 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 raíz, se crea una nueva raíz con un único elemento como valor separador, y dos hijos. Es por esto por lo que la cota inferior del tamaño de los nodos no se aplica a la raíz. El máximo número de elementos por nodo es U-1. Así que debe ser posible dividir el número máximo de elementos U-1 en dos nodos legales. Si este número fuera impar, entonces U=2L, y cada uno de los nuevos nodos tendrían (U-2)/2 = L-1 elementos, y por lo tanto serían nodos legales. Si U-1 fuera par, U=2L-1, así que habría 2L-2 elementos en el nodo. La mitad de este número es L-1, que es el número mínimo de elementos permitidos por nodo.

Un algoritmo mejorado admite una sola pasada por el árbol desde la raíz, hasta el nodo donde la inserción tenga lugar, dividiendo todos los nodos que estén 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 añadir 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 definición de árboles-B.

Eliminación

La eliminación de un elemento es directa si no se requiere corrección para garantizar sus propiedades. Hay dos estrategias populares para eliminar un nodo de un árbol B.

  • localizar y eliminar el elemento, y luego corregir, o
  • hacer una única pasada de arriba abajo por el árbol, pero cada vez que se visita un nodo, reestructurar el árbol para que cuando se encuentre el elemento a ser borrado, pueda eliminarse sin necesidad de continuar reestructurando

Se pueden dar dos problemas al eliminar elementos. Primero, el elemento puede ser un separador de un nodo interno. Segundo, puede suceder que al borrar el elemento número de elementos del nodo quede debajo de la cota mínima. Estos problemas se tratan a continuación en orden.

Eliminación en un nodo hoja

  • Busque el valor a eliminar.
  • Si el valor se encuentra en un nodo hoja, se elimina directamente la clave, posiblemente dejándolo con muy pocos elementos; por lo que se requerirán cambios adicionales en el árbol.
 
eliminar clave 20 de un nodo interno.

Eliminación en un nodo interno

(recursivamente) del nuevo nodillo.

En el segundo caso, uno de los dos nodos hijos tienen un número de elementos mayor que el mínimo. Entonces izquierdo o el menor elemento del nuevo separador.

  • Como se ha eliminado un elemento de un nodo hoja, se trata este caso de manera equivalente.

Rebalanceo después de la eliminación

Si al eliminar un elemento de un nodo hoja el nodo se ha quedado con menos elementos que el mínimo permitido, algunos elementos se deben redistribuir. En algunos casos el cambio lleva la deficiencia al nodo padre, y la redistribución se debe aplicar iterativamente hacia arriba del árbol, quizá incluso hasta a la raíz. Dado que la cota mínima en el número de elementos no se aplica a la raíz, el problema desaparece cuando llega a esta.

Construcción Inicial

En aplicaciones, es frecuentemente útil construir un árbol-B para representar un gran número de datos existentes y después actualizarlo de forma creciente usando operaciones estándar de los árboles-B. En este caso, el modo más eficiente para construir el árbol-B inicial no sería insertar todos los elementos en el conjunto inicial sucesivamente, sino construir el conjunto inicial de nodos hoja directamente desde la entrada, y después construir los nodos internos a partir de este conjunto. Inicialmente, todas las hojas excepto la última tienen un elemento más, el cual será utilizado para construir los nodos internos. Por ejemplo, si los nodos hoja tienen un tamaño máximo 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 más. 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 quedaría 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 está sobrecargado. En nuestro ejemplo solo nos quedaría el nivel de la raíz:

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 excepción: El nodo raíz debe tener entre 2 y U hijos. En otras palabras, la raíz está exenta de la restricción del límite inferior. Esto permite al árbol sostener un pequeño número de elementos. Un nodo raíz con un solo hijo no tendría sentido, ya que podríamos añadírselo a la raíz. Un nodo raíz sin hijos es también innecesario, ya que un árbol sin hijos se suele representar sin raíz.

Multi-modo:combinar y dividir

Es posible modificar el algoritmo anterior, cuando tratamos de encontrar más elementos para un nodo al que le faltan, examinamos a los hermanos, y si alguno tiene más del valor mínimo de números, reordenamos los valores de los hermanos de un extremo a otro para rellenar al mínimo 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 división puede dar lugar a un número de hermanos, redistribuyendo los elementos entre ellos en lugar de dividir un nodo.

En la práctica, el uso más común 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 número de nodos que se necesitan para la mayoría de situaciones comunes, pero podrían ser útiles en otras.

Relación entre U y L

Es casi universal el dividir nodos eligiendo un elemento medio y creando dos nuevos nodos. Esto limita la relación entre L y U. Si intentamos insertar un elemento dentro de un nodo con U elementos, esto conlleva una redistribución de U elementos. Uno de estos, el intermedio, será trasladado al nodo padre, y los restantes serán divididos equitativamente, en la medida de lo posible, entre los dos nuevos nodos.

Por ejemplo, en un árbol-B 2-3, añadiendo 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 tamaño permitido, lo suficiente pequeño, una vez q el nodo ha sido divido. También es posible dividir nodos completos en más de dos nodos nuevos. Eligiendo dividir un nodo en más de 2 nodos nuevos requerirá un valor más pequeño para L para el mismo valor de U. Como L se hace más pequeño, esto permite que haya más espacio sin usar en los nodos. Esto disminuirá la frecuencia de división de nodos, pero de la misma manera aumentará la cantidad de memoria que se necesita para almacenar el mismo número de valores, y el número de nodos que tienen que ser examinados para una operación 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 porque el árbol desciende desde la raíz hasta las hojas por búsqueda e inserción), los permisos de escritura solo se requieren cuando un bloque del árbol es modificado. Minimizar los permisos a un nodo colgante simple solo durante su modificación, ayuda a maximizar el acceso concurrente por múltiples usuarios. Este dato se tiene en cuenta en bases de datos como, por ejemplo, ISAM (Métodos Indexados de Acceso Secuencial).

Véase también

Referencias

  1. $Cormen, Thomas; Leiserson, Charles; Rivest, Ronald; Stein, Clifford (2001), Introduction to Algorithms, MIT Press and McGraw-Hill, pp. 434-454, ISBN 0-262-03293-7 .

Enlaces externos

  • (en inglés)
  • Applet de ejemplo del funcionamiento del árbol B (en inglés)
  • Indexación de datos con árbol B en Java
  •   Datos: Q677051
  •   Multimedia: B-Trees / Q677051

Árbol, ciencias, computación, árboles, árboles, estructuras, datos, árbol, encuentran, comúnmente, implementaciones, bases, datos, sistemas, archivos, igual, árboles, binarios, búsqueda, árboles, balanceados, búsqueda, pero, cada, nodo, puede, poseer, más, hij. En las ciencias de la computacion los arboles B o B arboles son estructuras de datos de arbol que se encuentran comunmente en las implementaciones de bases de datos y sistemas de archivos Al igual que los arboles binarios de busqueda son arboles balanceados de busqueda pero cada nodo puede poseer mas de dos hijos 1 Los arboles B mantienen los datos ordenados y las inserciones y eliminaciones se realizan en tiempo logaritmico amortizado Archivo B tre example svg Ejemplo de arbol B Indice 1 Definicion 2 Definicion tecnica 3 Altura El mejor y el peor caso 4 Estructura de los nodos 5 Algoritmos 5 1 Busqueda 5 2 Insercion 5 3 Eliminacion 5 3 1 Eliminacion en un nodo hoja 5 3 2 Eliminacion en un nodo interno 5 4 Rebalanceo despues de la eliminacion 5 5 Construccion Inicial 6 Notas 6 1 Multi modo combinar y dividir 6 2 Relacion entre U y L 6 3 Acceso concurrente 7 Vease tambien 8 Referencias 9 Enlaces externosDefinicion EditarLa idea tras los arboles B es que los nodos internos deben tener un numero 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 varia dentro de un nodo Para que siga manteniendose el numero 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 arboles B no necesitan rebalancearse tan frecuentemente como los arboles binarios de busqueda auto balanceables Pero por otro lado pueden desperdiciar memoria porque los nodos no permanecen totalmente ocupados Los limites uno superior y otro inferior en el numero de nodos hijo son definidos para cada implementacion en particular Por ejemplo en un arbol B 2 3 A menudo simplemente llamado arbol 2 3 cada nodo solo puede tener 2 o 3 nodos hijos Un arbol B se mantiene balanceado porque requiere que todos los nodos hoja se encuentren a la misma altura Los arboles 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 rigidos Al maximizar el numero de nodos hijo de cada nodo interno la altura del arbol 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 tamano analogo en el dispositivo Mientras que los arboles B 2 3 pueden ser utiles en la memoria principal y ademas mas faciles de explicar si el tamano de los nodos se ajusta para caber en un bloque de disco el resultado puede ser un arbol B 129 513 Los creadores del arbol 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 arbol La B tambien puede referirse a Bayer o a Boeing porque sus creadores trabajaban en los Boeing Scientific Research Labs por ese entonces Definicion tecnica EditarB arbol es un arbol de busqueda que puede estar vacio o aquel cuyos nodos pueden tener varios hijos existiendo una relacion de orden entre ellos tal como muestra el dibujo Un arbol B de orden M el maximo numero de hijos que puede tener cada nodo es un arbol que satisface las siguientes propiedades Cada nodo tiene como maximo M hijos Cada nodo excepto raiz tiene como minimo M 2 claves La raiz tiene al menos 2 hijos si no es un nodo hoja segun M 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 raiz r1 rm tienen que cumplir ciertas condiciones El primero tiene valor menor que r1 El segundo tiene valor mayor que r1 y menor que r2 etc El ultimo hijo tiene valor mayor que rm Altura El mejor y el peor caso EditarEn el mejor de los casos la altura de un arbol B es log M n displaystyle log M n En el peor de los casos la altura de un arbol B es n displaystyle n Donde M es el numero maximo de hijos que puede tener un nodo Estructura de los nodos EditarCada elemento de un nodo interno actua como un valor separador que lo divide en subarboles Por ejemplo si un nodo interno tiene tres nodos hijo debe tener dos valores separadores o elementos a1 y a2 Todos los valores del subarbol izquierdo deben ser menores a a1 todos los valores del subarbol del centro deben estar entre a1 y a2 y todos los valores del subarbol derecho deben ser mayores a a2 Los nodos internos de un arbol 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 maximo de U hijos y con excepcion del nodo raiz un minimo de L hijos Para todos los nodos internos exceptuando la raiz el numero de elementos es uno menos que el numero de punteros a nodos El numero de elementos se encuentra entre L 1 y U 1 El numero U debe ser 2L o 2L 1 es decir cada nodo interno esta por lo menos a medio llenar Esta relacion entre U y L implica que dos nodos que estan 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 arbol B se ajuste para preservar sus propiedades ante la insercion y eliminacion de elementos Los nodos hoja tienen la misma restriccion sobre el numero de elementos pero no tienen hijos y por tanto carecen de punteros El nodo raiz tiene limite superior de numero de hijos pero no tiene limite inferior Por ejemplo si hubiera menos de L 1 elementos en todo el arbol la raiz seria el unico nodo del arbol y no tendria hijos Un arbol B de altura n 1 puede contener U veces por elementos mas que un arbol B de profundidad n pero el costo en la busqueda insercion y eliminacion crece con la altura del arbol Como todo arbol balanceado el crecimiento del costo es mas lento que el del numero de elementos Algunos arboles balanceados guardan valores solo en los nodos hoja y por lo tanto sus nodos internos y nodos hoja son de diferente tipo Los arboles 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 estos mejora el funcionamiento Class nodo arbol 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 EditarBusqueda Editar La busqueda es similar a la de los arboles binarios Se empieza en la raiz y se recorre el arbol hacia abajo escogiendo el sub nodo de acuerdo a la posicion relativa del valor buscado respecto a los valores de cada nodo Tipicamente se utiliza la busqueda binaria para determinar esta posicion relativa Procedimiento ejemplo2 insercion en arbol B Situarse en el nodo raiz Comprobar si contiene la clave a buscar Encontrada fin de procedimiento No encontrada Si es hoja no existe la clave En otro caso el nodo actual es el hijo que corresponde La clave a buscar k lt k1 hijo izquierdo La clave a buscar k gt ki y k lt ki 1 hijo iesimo Volver a paso 2 Insercion Editar Las inserciones se hacen en los nodos hoja Realizando una busqueda en el arbol se halla el nodo hoja en el cual deberia ubicarse el nuevo elemento Si el nodo hoja tiene menos elementos que el maximo numero de elementos legales entonces hay lugar para uno mas Inserte el nuevo elemento en el nodo respetando el orden de los elementos De otra forma el nodo debe ser dividido en dos nodos La division se realiza de la siguiente manera Se escoge el valor medio entre los elementos del nodo y el nuevo elemento 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 actua como valor separador El valor separador se debe colocar en el nodo padre lo que puede provocar que el padre sea dividido en dos y asi sucesivamente Si las divisiones de nodos suben hasta la raiz se crea una nueva raiz con un unico elemento como valor separador y dos hijos Es por esto por lo que la cota inferior del tamano de los nodos no se aplica a la raiz El maximo numero de elementos por nodo es U 1 Asi que debe ser posible dividir el numero maximo de elementos U 1 en dos nodos legales Si este numero fuera impar entonces U 2L y cada uno de los nuevos nodos tendrian U 2 2 L 1 elementos y por lo tanto serian nodos legales Si U 1 fuera par U 2L 1 asi que habria 2L 2 elementos en el nodo La mitad de este numero es L 1 que es el numero minimo de elementos permitidos por nodo Un algoritmo mejorado admite una sola pasada por el arbol desde la raiz hasta el nodo donde la insercion tenga lugar dividiendo todos los nodos que esten 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 anadir un nuevo elemento Esto requiere que U 2L en lugar de U L 1 lo que explica por que algunos libros de texto imponen este requisito en la definicion de arboles B Eliminacion Editar La eliminacion de un elemento es directa si no se requiere correccion para garantizar sus propiedades Hay dos estrategias populares para eliminar un nodo de un arbol B localizar y eliminar el elemento y luego corregir o hacer una unica pasada de arriba abajo por el arbol pero cada vez que se visita un nodo reestructurar el arbol para que cuando se encuentre el elemento a ser borrado pueda eliminarse sin necesidad de continuar reestructurandoSe pueden dar dos problemas al eliminar elementos Primero el elemento puede ser un separador de un nodo interno Segundo puede suceder que al borrar el elemento numero de elementos del nodo quede debajo de la cota minima Estos problemas se tratan a continuacion en orden Eliminacion en un nodo hoja Editar Busque el valor a eliminar Si el valor se encuentra en un nodo hoja se elimina directamente la clave posiblemente dejandolo con muy pocos elementos por lo que se requeriran cambios adicionales en el arbol eliminar clave 20 de un nodo interno Eliminacion en un nodo interno Editar recursivamente del nuevo nodillo En el segundo caso uno de los dos nodos hijos tienen un numero de elementos mayor que el minimo Entonces izquierdo o el menor elemento del nuevo separador Como se ha eliminado un elemento de un nodo hoja se trata este caso de manera equivalente Rebalanceo despues de la eliminacion Editar Si al eliminar un elemento de un nodo hoja el nodo se ha quedado con menos elementos que el minimo permitido algunos elementos se deben redistribuir En algunos casos el cambio lleva la deficiencia al nodo padre y la redistribucion se debe aplicar iterativamente hacia arriba del arbol quiza incluso hasta a la raiz Dado que la cota minima en el numero de elementos no se aplica a la raiz el problema desaparece cuando llega a esta Construccion Inicial Editar En aplicaciones es frecuentemente util construir un arbol B para representar un gran numero de datos existentes y despues actualizarlo de forma creciente usando operaciones estandar de los arboles B En este caso el modo mas eficiente para construir el arbol B inicial no seria insertar todos los elementos en el conjunto inicial sucesivamente sino construir el conjunto inicial de nodos hoja directamente desde la entrada y despues construir los nodos internos a partir de este conjunto Inicialmente todas las hojas excepto la ultima tienen un elemento mas el cual sera utilizado para construir los nodos internos Por ejemplo si los nodos hoja tienen un tamano maximo 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 ultimo 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 24Construiremos el siguiente nivel hacia arriba desde las hojas tomando el ultimo elemento de cada hoja excepto el ultimo De nuevo cada nodo excepto el ultimo contendra un valor mas 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 quedaria de la siguiente manera 5 10 15 201 2 3 4 6 7 8 9 11 12 13 14 16 17 18 19 21 22 23 24Este proceso se continuara hasta que alcancemos un nivel con un solo nodo y no esta sobrecargado En nuestro ejemplo solo nos quedaria el nivel de la raiz 155 10 201 2 3 4 6 7 8 9 11 12 13 14 16 17 18 19 21 22 23 24Notas EditarCada nodo tendra siempre entre L y U hijos incluidos con una excepcion El nodo raiz debe tener entre 2 y U hijos En otras palabras la raiz esta exenta de la restriccion del limite inferior Esto permite al arbol sostener un pequeno numero de elementos Un nodo raiz con un solo hijo no tendria sentido ya que podriamos anadirselo a la raiz Un nodo raiz sin hijos es tambien innecesario ya que un arbol sin hijos se suele representar sin raiz Multi modo combinar y dividir Editar Es posible modificar el algoritmo anterior cuando tratamos de encontrar mas elementos para un nodo al que le faltan examinamos a los hermanos y si alguno tiene mas del valor minimo de numeros reordenamos los valores de los hermanos de un extremo a otro para rellenar al minimo 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 division puede dar lugar a un numero de hermanos redistribuyendo los elementos entre ellos en lugar de dividir un nodo En la practica el uso mas comun de los arboles B implica mantener los nodos una memoria secundaria donde sera lento acceder a un nodo que no haya sido usado con anterioridad Utilizando solo divisiones y combinaciones disminuimos el numero de nodos que se necesitan para la mayoria de situaciones comunes pero podrian ser utiles en otras Relacion entre U y L Editar Es casi universal el dividir nodos eligiendo un elemento medio y creando dos nuevos nodos Esto limita la relacion entre L y U Si intentamos insertar un elemento dentro de un nodo con U elementos esto conlleva una redistribucion de U elementos Uno de estos el intermedio sera trasladado al nodo padre y los restantes seran divididos equitativamente en la medida de lo posible entre los dos nuevos nodos Por ejemplo en un arbol B 2 3 anadiendo 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 esta completo y se divide exactamente en 2 nodos L debe tener un tamano permitido lo suficiente pequeno una vez q el nodo ha sido divido Tambien es posible dividir nodos completos en mas de dos nodos nuevos Eligiendo dividir un nodo en mas de 2 nodos nuevos requerira un valor mas pequeno para L para el mismo valor de U Como L se hace mas pequeno esto permite que haya mas espacio sin usar en los nodos Esto disminuira la frecuencia de division de nodos pero de la misma manera aumentara la cantidad de memoria que se necesita para almacenar el mismo numero de valores y el numero de nodos que tienen que ser examinados para una operacion particular Acceso concurrente Editar Lehman y Yao nos mostraron que uniendo los bloques de arboles en cada nivel con un puntero al siguiente nivel en una estructura de arbol donde los permisos de lectura de los bloques del arbol se pueden evitar porque el arbol desciende desde la raiz hasta las hojas por busqueda e insercion los permisos de escritura solo se requieren cuando un bloque del arbol es modificado Minimizar los permisos a un nodo colgante simple solo durante su modificacion ayuda a maximizar el acceso concurrente por multiples usuarios Este dato se tiene en cuenta en bases de datos como por ejemplo ISAM Metodos Indexados de Acceso Secuencial Vease tambien EditarArbol Arbol binario Arbol B Arbol B Particion de espacio binario Arbol rojo negro Arbol AA Skip listReferencias Editar Cormen Thomas Leiserson Charles Rivest Ronald Stein Clifford 2001 Introduction to Algorithms MIT Press and McGraw Hill pp 434 454 ISBN 0 262 03293 7 Enlaces externos EditarEjemplo de funcionamiento del arbol 2 3 4 la variante mas simple de arbol B en ingles Applet de ejemplo del funcionamiento del arbol B en ingles Tutorial sobre arboles B Indexacion de datos con arbol B en Java Datos Q677051 Multimedia B Trees Q677051 Obtenido de https es wikipedia org w index php title Arbol B amp oldid 150106126, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos