Los B-árboles sugieron en 1972 creados por R.Bayer y E.McCreight.El problema original comienza con la necesidad de mantener índices en almacenamiento externo para acceso a bases de datos,es decir,con el grave problema de la lentitud de estos dispositivos se pretende aprovechar la gran capacidad de almacenamiento para mantener una cantidad de información muy alta organizada de forma que el acceso a una clave sea lo más rápido posible. Los árboles con múltiples hijos hacen que el mantenimiento de índices en memoria externa sea mucho más eficiente y es justamente éste el motivo por el que este tipo de árboles han sido los que tradicionalmente se han usado para el mantenimiento de índices en sistemas de bases de datos.Lógicamente,aunque este tipo de estructuras sean más idóneas para mantener grandes cantidades de datos en almacenamiento externo es posible construirlas de igual forma en memoria principal,y por consiguiente pueden ser mantenidas en memoria (mediante el uso de punteros por ejemplo)al igual que las que hemos estudiado hasta ahora. Los árboles B constituyen una categoría muy importante de estructuras de datos, que permiten una implementación e?ciente de conjuntos y diccionarios, para operaciones de consulta y acceso secuencial. Existe una gran variedad de árboles B: los árboles B, B+ y B*; pero todas ellas están basadas en la misma idea, la utilización de árboles de búsqueda no binarios y con condición de balanceo. El árbol B fue desarrollado para mantener estructuras de datos cuyo contenido se va modificando con el tiempo (Alta y bajas) de forma de poder encontrar en forma rápida y eficiente un elemento en particular. Para ello se busca que la profundidad del árbol sea la menor posible. Se requería también que la modificación del contenido no sea muy costosa en tiempo y espacio. Están pensados para disminuir la cantidad de accesos a disco, y la posibilidad de mantener en memoria la parte que se está utilizando y el resto conservarlo en el disco.
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. Los nodos que conforman el árbol B son denominados Páginas, para comprender de una mejor manera el concepto de Árbol B es necesario, primeramente, conocer la estructura básica de una página.
Cada elemento de una página interno actúa como un valor separador, que lo divide en sub árboles. Las páginas de un árbol B, es decir las páginas que no son hoja, usualmente se representan como un conjunto ordenado de elementos y punteros a los hijos. Cada página interna contiene un máximo de M hijos y, con excepción del nodo raíz, un mínimo de X hijo(s). Esta relación entre M y X implica que dos nodos que están a medio llenar pueden unirse para formar una página con las características básicas, y un nodo lleno puede dividirse (romperse) en dos páginas con las características básicas. Estas propiedades hacen posible que el árbol B se ajuste para preservar sus propiedades ante la inserción y eliminación de elementos. Las páginas hoja tienen la misma restricción sobre el número de elementos, pero no tienen hijos, y por tanto poseen punteros vacios (nulos). El nodo raíz tiene límite superior de número de hijos, pero no tiene límite inferior. Algunos árboles balanceados guardan valores sólo en las páginas hoja, y por lo tanto sus páginas internas y páginas hojas son de diferente tipo. Los árboles B guardan valores en cada página, y pueden utilizar la misma estructura para todos las páginas.
Un ÁRBOL B de orden n es un árbol de búsqueda que satisface :
Localizar una clave en un B-árbol es una operación simple pues consiste en situarse en el nodo raíz del árbol, si la clave se encuentra ahí hemos terminado y si no es así seleccionamos de entre los hijos el que se encuentra entre dos valores de clave que son menor y mayor que la buscada respectivamente y repetimos el proceso hasta que la encontremos. En caso de que se llegue a una hoja y no podamos proseguir la búsqueda la clave no se encuentra en el árbol. En definitiva, los pasos a seguir son los siguientes:
Eliminar La idea para realizar el borrado de una clave es similar a la inserción teniendo en cuenta que ahora, en lugar de divisiones, realizamos uniones. Existe un problema añadido, las claves a borrar pueden aparecer en cualquier lugar del árbol y por consiguiente no coincide con el caso de la inserción en la que siempre comenzamos desde una hoja y propagamos hacia arriba. La solución a esto es inmediata pues cuando borramos una clave que está en un nodo interior, lo primero que realizamos es un intercambio de este valor con el inmediato sucesor en el árbol, es decir, el hijo más a la izquierda del hijo derecho de esa clave. Las operaciones a realizar para poder llevar a cabo el borrado son por tanto:
Estructura de Datos jerárquica No binaria, que se caracteriza por poseer los datos ordenados basa su implementación en el elemento fundamental llamado página que poseen información y punteros hacia las demás páginas, este elemento fundamental se implementa en la clase Pagina, contiene como atributos el numero mínimo de datos que debe poseer una Pagina “n”, este número lo determina el grado del árbol que es dado en la creación de la estructura, el numero máximo que debe poseer una Pagina que es el dos veces el grado del árbol “m”, además posee el número de apuntadores que tiene la Pagina que es el numero máximo de datos que puede poseer una pagina más 1, también contiene un vector de la información que posee y un vector de apuntadores a las demás paginas. La estructura se implementó en la clase ArbolB, que se origina con la creación de una página de la que se hace referencia para la implementación de los procesos fundamentales como lo son: la inserción, la elimininacion, la búsqueda, entre otras operaciones. A continuación se presenta el diagrama de clases para el Árbol B implementado, con cada una de sus operaciones: