Universidad Técnica Federico Santa María - Departamento de Informática Estructura de Datos Árboles B Árboles B* Árboles B+ Prof.: Mauricio Solar Prof.: Lorna Figueroa Primer Semestre, 2010 1 Universidad Técnica Federico Santa María - Departamento de Informática Introducción • Necesidad de mantener índices en almacenamiento externo para acceso a bases de datos, • Problema: 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. • La letra B no significa "binario": • Los árboles-B nunca son binarios. • Tampoco es porque sean árboles de búsqueda, ya que en inglés se denominan B-trees. • Tampoco es porque sean balanceados, ya que suelen no serlo. 2 Universidad Técnica Federico Santa María - Departamento de Informática Introducción • Normalmente se usan árboles binarios de búsqueda para ordenar listas de valores, minimizando el número de lecturas, y evitando tener que ordenar dichas listas. • Desventajas ABB: • Es difícil construir un ABB perfectamente equilibrado. • El número de consultas en el árbol no equilibrado es impredecible. • El número de consultas aumenta rápidamente con el número de registros a ordenar. • Para evitar estos inconvenientes se usan árboles-B, sobre todo cuando se ordenan archivos, convertido en el sistema de indexación más utilizado. 3 Universidad Técnica Federico Santa María - Departamento de Informática Introducción • Problema de los ABB al usar almacenamiento secundario: • la búsqueda de un elemento requiere muchos accesos a disco (extremadamente lento comparado con un acceso a memoria) • Ej.: para un millón de elementos ⇒ Nº accesos a disco = O(h) = O(log2 1.000.000) ≈ 20 • Solución: conseguir mayor grado de ramificación para tener menor altura en el árbol. 4 Universidad Técnica Federico Santa María - Departamento de Informática Introducción • Particionar el ABB en páginas • Mantener en memoria una de las páginas • Con páginas de 100 nodos en un árbol de 106 nodos: Nºmedio accesos = (log100 106) = 3 << 20 5 Universidad Técnica Federico Santa María - Departamento de Informática Introducción • Problemas de los AVL: • Tienen una eficiencia F(n) = log n • Su altura depende de la cantidad de nodos. • En el nivel k , tendrá 2k+1 –1 nodos. • Cuando se tienen un conjunto masivo de datos, • Ej.; millón de registros de clientes de un banco equivalen a k ≅ 19 niveles, • Los datos estarán ubicados en discos. • El tiempo de acceso a disco es notablemente superior que el de acceso a RAM. Î Minimizar estos accesos al disco y maximizar el uso de RAM 6 Universidad Técnica Federico Santa María - Departamento de Informática Introducción Solución: Árboles de búsqueda m–arios. • Cada nodo puede tener hasta m subárboles. • Las claves se organizan en AVL. • Objetivo: Que la altura del árbol sea pequeña, dado que las iteraciones y los acceso a disco dependen de ello. • La altura de un árbol m-ario (multicamino) completo es: O(logm N) • Ej.: para un millón de elementos y m = 10 ⇒ Nº accesos a disco = O(h) = O(log10 1.000.000) = 6 7 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B El Árbol B es una solución particular de esta tecnología 8 Universidad Técnica Federico Santa María - Departamento de Informática Arboles B (Bayer y McCreight) • Son árboles multicamino con una construcción especial en forma ascendente, • Permite mantener el árbol balanceado a bajo costo. • Los archivos dedicados a usuarios, a sistemas de BD, y a métodos de acceso de propósito general, han sido propuestos e implementados usando árboles-B. El árbol-B es, de hecho, la organización estándar para índices en un sistema de BD. 9 Universidad Técnica Federico Santa María - Departamento de Informática Arboles B – Definición • Los B-árboles son árboles cuyos nodos pueden tener un número múltiple de hijos: Árbo B de orden m 10 Universidad Técnica Federico Santa María - Departamento de Informática Arboles B • Tienen por objetivo agrupar en cada nodo más de un elemento de manera que el acceso a un elemento cualquiera tenga lugar visitando un número de nodos inferior al caso del ABB. • Esto es útil cuando el árbol se halla almacenado en un dispositivo de acceso lento, como disco duro, y acceder a un nodo implica acceder a un sector distinto del disco. • En estos casos se hace coincidir un sector físico con el tamaño de un nodo, de manera que si un elemento ocupa e bytes y un sector físico tiene un tamaño f, en cada nodo se almacenarán e elementos. f ==> Aprovecha al máximo el acceso al disco. ⎣⎦ 11 Universidad Técnica Federico Santa María - Departamento de Informática Arboles B • Generalización de un árbol 2-3, • Un árbol 2-3 es un árbol B de orden 3 • La ventaja de los árboles-B reside en los métodos para insertar y borrar registros, que dejan siempre el árbol balanceado. • Al igual que en el caso de los ABB, inserciones aleatorias de registros dentro de un archivo pueden dejar el árbol sin balancear. 12 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B – características • Un parámetro muy importante en los árboles-B es el orden(m). • El orden de un árbol-B es el número máximo de ramas que pueden partir de un nodo. • Si k es el número de ramas que parten de un nodo de un árbol-B, el nodo contendrá k-1 claves. • El árbol está ordenado. • Todos los nodos terminales, (nodos hoja), están en el mismo nivel. • Todos los nodos intermedios, excepto el raíz, deben tener entre m/2 y m ramas no nulas. 13 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B – características • Todos los nodos intermedios, excepto el nodo raíz, deben tener entre m/2 y m ramas no nulas. • El máximo número de claves por nodo es m-1. • El mínimo número de claves por nodo es (m/2)-1. • La profundidad (h) es el número máximo de consultas para encontrar una clave. • Perfectamente equilibrado. • Disminuye la profundidad del árbol. 14 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B – características • Página: nombre de los nodos. • Se les accede en bloque. • Como máximo: m ramas y m–1 claves • Como mínimo: (m/2)+1 ramas y (m/2) claves • La raíz puede estar vacía o incluso tener 1 clave, con 2 ramas. 15 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B – Propiedades • Cada nodo en árbol-B de orden d contiene a lo más 2d claves y 2d+1 punteros: • El número de claves puede variar de un nodo a otro, pero cada uno debe tener al menos d claves y d+1 punteros. • Como consecuencia, cada nodo está completo al menos a la mitad de su capacidad. • Nodo: un mínimo de d elementos y máximo de 2d elementos, excepto la raíz, que puede tener un mínimo de un elemento. 16 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B • Árbol B de orden 5: 17 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B – Propiedades • Si k1, k2, ..., km denotan los elementos del nodo y P0, P1, .., Pm los hijos, entonces: • P0 contiene los elementos menores que k1 • Pi contiene los elementos mayores que ki y menores que ki+1 • Pm contiene todos los elementos mayores que km • Todas las ramas tienen la misma longitud. 18 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B – Propiedades • Si se recorre en profundidad: lista ordenada ↑ • Ejemplo: árbol B de orden d=2: (mín. 2 y máx. 4) 19 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo: árbol B de orden 2 20 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo: árbol B de orden 2 66 29 55 15 19 22 26 35 41 58 62 1. 2. 3. 4. 5. 75 87 94 69 73 77 81 89 93 96 98 99 Orden del árbol: 2 Altura del árbol: 3 Todas las páginas contienen: 2(d),3(d+1) o 4(2d+1) elementos; excepto la raíz (1) Los elementos dentro del árbol se encuentran ordenados en forma creciente (izq. a der.) Todas las hojas están al mismo nivel 21 Universidad Técnica Federico Santa María - Departamento de Informática TAD arbolB: ArbolB.h /*Definición de los Datos del TAD*/ #define m 5 // Orden del BTree como máximo: m ramas y m–1 claves typedef int tipoClave; typedef struct pagina { tipoClave claves[m]; // m{0..4} Numero de claves será for (k=1; k ≤ m; k++) struct pagina* ramas[m]; int cuenta; //Numero de claves de la pagina } Pagina; 22 Universidad Técnica Federico Santa María - Departamento de Informática TAD arbolB: ArbolB.h // Definición de las operaciones del TAD • void escribeNodo(Pagina* actual); • int nodoLLeno(Pagina* actual); // Devuelve verdadero si el numero de claves es m–1 • int nodoSemiVacio(Pagina* actual); // Devuelve .V. si el numero de claves es menor a m/2 • void crearArbolB(Pagina **raiz); • Pagina *buscar (Pagina *actual, tipoClave cl, int * indice); • Pagina *buscarNodo(Pagina *actual, tipoClave cl, int * k); • void insertar (Pagina **raiz, tipoClave cl); 23 Universidad Técnica Federico Santa María - Departamento de Informática TAD arbolB: ArbolB.c int nodoLLeno(Pagina* actual) { return (actual->cuenta == m – 1); } int nodoSemiVacio(Pagina* actual) { return (actual->cuenta < m/2); } void escribeNodo(Pagina* actual) { int k; printf("\n Nodo: "); for (k = 1; k <= actual>cuenta; k++) printf(" %d ",actual>claves[k]); printf("\n"); } 24 Universidad Técnica Federico Santa María - Departamento de Informática TAD Árbol B: búsqueda Nota: el diagrama sólo muestra el criterio de búsqueda en una página, falta el ciclo de búsqueda tras actualizar el puntero a la página hija 25 Universidad Técnica Federico Santa María - Departamento de Informática TAD Árbol B: búsqueda • Situarse en el nodo raíz del árbol, • si la clave se encuentra ahí, terminar; • si no, seleccionar de entre los hijos el que se encuentra entre dos valores de clave que son menor y mayor que la buscada respectivamente, • repetir el proceso hasta encontrar la clave. • En caso de que se llegue a una hoja y no se pueda proseguir la búsqueda, la clave no se encuentra en el árbol. 26 Universidad Técnica Federico Santa María - Departamento de Informática TAD Árbol B: Algoritmo de búsqueda 1. Seleccionar como nodo actual la raíz del árbol. 2. Comprobar si la clave se encuentra en el nodo actual: 1. 1. Si la clave está, fin. 2. 2. Si la clave no está: • Si es en una hoja, no se encuentra la clave. Fin. • Si no, hacer nodo actual igual al hijo que corresponde según el valor de la clave a buscar y los valores de las claves del nodo actual (buscar la clave K en un nodo con n claves: el hijo izquierdo si K < K1, el hijo derecho si K > Kn y el hijo i-ésimo si Ki < K < Ki+1) y volver al segundo paso. 27 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: inserción • Crecen “Hacia Arriba”, hacia la raíz • • • Las claves que se insertan, siempre van en un nodo hoja. Por ser perfectamente equilibrado, toda hoja está al mismo nivel. No hay elementos repetidos. 28 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: algoritmo de inserción 1. Se busca la clave a insertar en el árbol. • Se desciende por el camino de búsqueda hasta una hoja. 2. ¿Está llena la página? (actual->cuenta == m – 1) • Hay lugar (cuenta < m – 1 ): • Inserta en ese nodo. Actualiza cuenta. Fin proceso • Se llenó: No se puede insertar allí: • Se divide la página en 2 paginas al mismo nivel que todas las demás, extrayendo la clave mediana ( para m = 5 es la clave[3] ) • Con esta mediana, se sube por el camino de búsqueda y se comienza el proceso desde el paso 1 nuevamente. • Esta proceso de ascensión de la clave mediana puede llegar hasta el nodo raíz, que también se partirá y su mediana, subiendo, será la nueva raíz de todo el árbol B. 29 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo de inserción Insertar el 9 causa división en dos sigue 30 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo de inserción Se propaga hacia arriba, causando otra división 31 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo de Inserción en Árbol B m=5 • Secuencia de Inserción: 6,11,5,4,8,9,12,21 32 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo de Inserción en Árbol B m=5 • Secuencia de Inserción: 6,11,5,4,8,9,12,21 33 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo de Inserción en Árbol B m=5 • Secuencia de Inserción: 6,11,5,4,8,9,12,21 34 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo de Inserción en Árbol B m=5 • Secuencia de Inserción: 6,11,5,4,8,9,12,21 • Continuar insertando:14, 10, 19, 28, 3, 17, 32, 15, 16, 26, 27. 35 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado • Similar a la inserción teniendo en cuenta que ahora, en lugar de divisiones, se realizan uniones. • Existe un problema adicional: las claves a borrar pueden aparecer en cualquier lugar del árbol. • Solución: cuando se borra una clave que está en un nodo interior, primero hacer un intercambio de este valor con el inmediato sucesor en el árbol, (o con antecesor inmediato) • es decir, el hijo más a la izquierda del hijo derecho de esa clave. (o el hijo más a la derecha del hijo izquierdo) 36 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado Las operaciones a realizar son: 1. Redistribución: se utiliza en el caso en que al borrar una clave el nodo se queda con un número menor que el mínimo y uno de los hermanos adyacentes tiene al menos uno más que ese mínimo. 2. Unión: se utiliza en el caso de que no sea posible la redistribución y por tanto sólo será posible unir los nodos junto con la clave que los separa que se encuentra en el padre. 37 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado 1. Redestribución (equilibrar página) 38 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo de redistribución La página izquierda no puede prestar nodos; La derecha sí Î EQUILIBRADO se añaden elementos de la página derecha, redistribuyendo de forma equitativa los elementos de ambas. 39 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo de redistribución • La redistribución: (a) Parte de un árbol-B antes, y (b) después de la redistribución de nodos entre dos vecinos. • Nótese la posición final de la clave intermedia, “50”. • La redistribución en nodos de igual tamaño ayuda a evitar ‘underflow’ en sucesivos borrados. 40 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado 2. Unión de páginas (fusionar, encadenar) 41 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo de unión de páginas las páginas vecinas no tienen elementos de sobra, entonces se une con la página vecina izquierda, utilizando como elemento intermedio una clave del padre (la clave 10), que las enlaza en la página del nivel superior. 42 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo de unión • Ejemplo de fusión de páginas y la situación final de la clave separadora. Borrado que origina una fusión de páginas el árbol re-balanceado 43 Universidad Técnica Federico Santa María - Departamento de Informática TAD Árbol B: borrado • Diagrama de flujo del borrado Nota: el diagrama sólo muestra el caso de subocupación de una página, no el caso completo en que se puede producir subocupación en el padre (falta ciclo) 44 Universidad Técnica Federico Santa María - Departamento de Informática TAD Árbol B: Algoritmo borrado 1. Localizar el nodo donde se encuentra la clave. 2. Si el nodo localizado no es una hoja, intercambiar el valor de la clave localizada con el valor de la clave más a la izquierda del hijo a la derecha. Hacer nodo actual igual a esa hoja. 3. Borrar la clave. 4. Si el nodo actual contiene al menos el mínimo de claves como para seguir siendo un B-árbol, fin. 5. Si el nodo actual tiene un número menor que el mínimo: 1. Si un hermano tiene más del mínimo de claves, redistribución y fin. 2. Si ninguno de los hermanos tiene más del mínimo, unión de dos nodos junto con la clave del padre y vuelta al paso 4 para propagar el borrado de dicha clave (ahora en el padre). 45 Universidad Técnica Federico Santa María - Departamento de Informática Arboles B - Borrado • • El borrado de la clave “17” requiere encontrar la siguiente clave en secuencia, “21”, e intercambiarla con la posición vacante. La siguiente clave siempre está en la hoja más a la izquierda del subárbol apuntado por el puntero derecho de la posición vacía. 46 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo Secuencia de claves a borrar: 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 47 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 48 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 49 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 50 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 51 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 52 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 53 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 54 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 55 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 56 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 57 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 58 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 59 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 60 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 61 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 62 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 63 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B: borrado – ejemplo 25 – 45 – 24 – 38 – 32 – 8 – 27 – 46 – 13 – 42 – 5 – 22 – 18 – 26 – 7 – 35 – 15 64 Universidad Técnica Federico Santa María - Departamento de Informática Variantes: Árboles B* (Knuth) • Proporciona mejor utilización del almacenamiento que los árboles B. • Propone nuevas reglas para el mantenimiento. • Los nodos deben estar 2/3 llenos siempre, (en vez de sólo la mitad). • La nueva construcción logra una búsqueda más rápida que el B+ pero una inserción más costosa. 65 Universidad Técnica Federico Santa María - Departamento de Informática Variantes: Árboles B* (Knuth) • Si cada nodo tiene un máximo de m descendientes. • Cada nodo, excepto la raíz, tiene al menos (2m-1)/3 hijos. • Si es de orden m=5 • Numero máximo por nodo: 4 claves y 5 ramas • Numero mínimo por nodo: 3 claves y 4 ramas 66 Universidad Técnica Federico Santa María - Departamento de Informática Variantes: Árboles B* (Knuth) • Recordar que en un Arbol B • Cada nodo, excepto la raíz, tiene al menos (m/2)+1 hijos. • Numero máximo por nodo: 4 claves y 5 ramas • Numero mínimo por nodo: 2 claves y 3 ramas 67 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B* (Knuth) • Propiedades de un B* de orden m: • Cada página tiene un máximo de m descendientes. • Todas las páginas, excepto la raíz y las hojas, tiene al menos (2m-1)/3) descendientes. • La raíz tiene al menos dos descendientes, a menos que sea hoja. • Todas las hojas se encuentran al mismo nivel. • Una página que no sea hoja, con K descendientes contiene K – 1 claves. • Una página-hoja contiene al menos (2m – 1)/3 – 1 claves, y no más de m – 1 claves. 68 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B* • Características • Mejoran la eficiencia del acceso directo y la sobrecarga de reorganizar el árbol en la inserción y el borrado • Aseguran ocupación de páginas ≥ 66,6% (2/3). • Cambia la división y fusión de páginas • División por superocupación • Pasar elementos al vecino • Cuando el vecino también esté lleno, convertir las dos páginas en tres. • Fusión por subocupación • Tres páginas se convirtien en dos. 69 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B* (Knuth) • La inserción del árbol-B* emplea un esquema de redistribución local para retrasar la división hasta que dos nodos hermanos están llenos. • Entonces los dos nodos se dividen en tres cada uno lleno en 2/3 partes. • Este esquema garantiza que la utilización del almacenamiento es al menos del 66%, mientras que solamente requieren una moderada modificación de los algoritmos de mantenimiento. • Esto debe ser señalado ya que el incremento en la utilización del almacenamiento tiene el efecto lateral de acelerar la búsqueda ya que la altura del árbol resultante es más pequeña. 70 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B* • Inserción con redistribución • Dejar la mitad a cada lado 71 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B* • Inserción con división • Cada página recibirá 2N/3 claves y suben dos claves a la página superior 72 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B* • Inserción con redistribución: ejemplo 73 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B* • Inserción con división: ejemplo 74 Universidad Técnica Federico Santa María - Departamento de Informática TAD Árbol B: recorrido / Árboles B+ • • Algoritmo: 1. Bajar hacia el primer hijo hasta que se alcance una página hoja 2. Recorrer secuencialmente la página hoja 3. Procesar la clave del padre y bajar por su hijo aplicando el paso 1 Recorrido no es eficiente • Se suelen optimizar usando árboles B+ 75 Universidad Técnica Federico Santa María - Departamento de Informática Variantes: Árboles B+ • Permiten un recorrido secuencial mas rápido que el B: • Las claves se encuentran en el índice y en las hojas • Existe un puntero a la próxima página. 76 Universidad Técnica Federico Santa María - Departamento de Informática Variantes: Árboles B+ 77 Universidad Técnica Federico Santa María - Departamento de Informática Variantes: Árboles B+ Ejemplo: Arbol B + de orden 2 55 77 37 48 55 61 73 77 80 87 92 78 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ • En un árbol-B+, todas las claves están en las hojas. • Los niveles más altos, que están organizados como un árbol-B, constan sólo de un índice, un mapa para permitir una rápida localización de las bifurcaciones de índices y claves. • Mismas características que árboles B, pero... • Formados por dos partes: • Índice: nodos interiores • Secuencia: páginas hoja enlazadas secuencialmente en las que se repiten las claves interiores • Recorrido más fácil: basta con recorrer la secuencia 79 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ • Separación lógica en un árbol-B+ de las bifurcaciones de índices y claves. • Las operaciones empiezan en la raíz como en un árbol-B. • El proceso secuencial empieza en la hoja más a la izquierda. 80 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ • Los nodos índices y nodos hoja pueden tener diferentes formatos o incluso diferentes tamaños. • En particular, los nodos hoja están unidos de izquierda a derecha como se muestra en la figura anterior. • La lista de uniones de hojas esta relacionada como un conjunto sucesión. • Las uniones del conjunto sucesión permiten un procesamiento secuencial fácil. • En general, el índice del árbol se almacena en un árbol B separado, que permite encontrar la información, que se encuentra en los registros de un archivo secuencial indexado. 81 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ Propiedades: • Cada página tiene a lo más m descendientes. • Cada página, excepto la raíz y las hojas, tienen entre m/2 y m hijos. • La raíz tiene al menos 2 descendientes (o ninguno). • Todas las hojas están al mismo nivel. • Una página que no sea hoja, si tiene k descendientes contiene k – 1 claves. • Los nodos terminales representan un conjunto de datos y son linkeados juntos. • Los nodos no terminales no tienen datos, sino punteros a los datos. 82 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ • Las operaciones de inserción y búsqueda en un árbol-B+ son procesadas casi idénticamente a las operaciones de inserción y de búsqueda en un árbol-B. • Cuando una hoja se divide en dos en vez de ascender la clave intermedia, el algoritmo asciende una copia de la clave, reteniendo la clave real en la hoja derecha. • Las operaciones de búsqueda difieren de las que se realizan en los árboles-B en que la búsqueda no se detiene si una clave en el índice es igual al valor por el que se pregunta. • En cambio, se sigue el puntero situado más a la derecha, y se procede de esta forma todo el camino hasta la hoja. 83 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ • Durante el borrado en un árbol-B+, la habilidad para dejar los valores sin clave en la parte de índices como separadores simplifica el proceso. • La clave a eliminar debe estar siempre en una hoja de tal modo que su eliminación sea simple. • Mientras la hoja se quede al menos medio llena, el índice no necesita cambiarse, incluso si una copia de la clave ha sido propagada en él. 84 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ • Ejemplo de cómo la copia de una clave borrada puede todavía dirigir búsquedas a la hoja correcta. • Por supuesto, si surge una condición de no desequilibrio, la redistribución o procedimientos de concatenación pueden requerir valores ajustados en el índice y también en las hojas. (a) Un árbol-B+ y (b) un árbol-B+ después de borrar la clave “20”. Incluso después de borrar, la clave “20” sirve todavía como valor separador en la parte índice. 85 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ Dada la siguiente secuencia de claves: 7, 25, 27, 15, 23, 19, 14, 29, 10, 50, 18, 22, 46, 17, 70, 33, 58 dibuje el árbol B+ de orden 2 con raíz R que se obtiene. 86 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ 7, 25, 27, 15, 23, 19, 14, 29, 10, 50, 18, 22, 46, 17, 70, 33, 58 87 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ 7, 25, 27, 15, 23, 19, 14, 29, 10, 50, 18, 22, 46, 17, 70, 33, 58 88 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ 7, 25, 27, 15, 23, 19, 14, 29, 10, 50, 18, 22, 46, 17, 70, 33, 58 89 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ 7, 25, 27, 15, 23, 19, 14, 29, 10, 50, 18, 22, 46, 17, 70, 33, 58 90 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ 7, 25, 27, 15, 23, 19, 14, 29, 10, 50, 18, 22, 46, 17, 70, 33, 58 91 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ 7, 25, 27, 15, 23, 19, 14, 29, 10, 50, 18, 22, 46, 17, 70, 33, 58 92 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ 7, 25, 27, 15, 23, 19, 14, 29, 10, 50, 18, 22, 46, 17, 70, 33, 58 93 Universidad Técnica Federico Santa María - Departamento de Informática Árboles B+ 7, 25, 27, 15, 23, 19, 14, 29, 10, 50, 18, 22, 46, 17, 70, 33, 58 94 Universidad Técnica Federico Santa María - Departamento de Informática ejemplo: borrar la clave 178 • La hoja a la que pertenece sólo tiene 2 claves. 3 son el mínimo número de claves que una hoja puede tener cuando m = 5. Eliminar 95 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo – borrar la clave 178 • Primero el algoritmo intenta adoptar un valor de la hoja del hermano, sin embargo esa hoja tiene el mínimo # de claves. • Por consiguiente, el algoritmo debe unir las dos hojas: Unir... 96 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo – borrar la clave 178 • Ahora el nodo del padre sólo tiene una hoja que está debajo del mínimo # de nodos que el árbol puede tener (2 en este caso). • El algoritmo intenta adoptar un valor del nodo del hermano. • Puesto que el hermano tiene tres hijos, la adopción tiene éxito. Adoptar 97 Universidad Técnica Federico Santa María - Departamento de Informática Ejemplo – borrar la clave 178 • Árbol resultante: 98 Universidad Técnica Federico Santa María - Departamento de Informática Aplicaciones • Construcción y mantenimiento de ABB extremadamente grandes • BD: No caben completos en memoria principal • Inserción y borrado constantes • Ejemplo: el índice de un sistema de archivos • Los nodos se almacenan en memoria secundaria • No es eficiente acceder a disco cada vez que sea necesario acceder a un nodo del índice • Si búsqueda en ABB ~ O(log N) Para un árbol de 106 ≈ 220 nodos ⇒ 20 accesos a disco 99 Universidad Técnica Federico Santa María - Departamento de Informática Bibliografía - Webgrafía • Algoritmos en C++ Robert Sedgewick, Fernando Davara Rodríguez, Miguel Katrib Mora, Sergio Ríos Aguilar, Luis Joyanes Aguilar – 2000 Addison-Wesley/Díaz de Santos. • Introduction to Algorithms, 2nd edition. Cormen, T., Leiserson, Ch., Rivest, R. and Stein, C. MIT Press. 2001. • Data Structures and Algorithms. A. Aho, J. Hopcroft, and J. Ullman. Addison-Wesley, 1983. Traducido al castellano, 1988. • Brassard, Gilles & Bratley, Paul. Fundamentos de Algoritmia. Prentice-Hall. 1997. • “Algoritmos y Estructuras de datos” de Aguilar y Martínez. Unidad 16 100 Universidad Técnica Federico Santa María - Departamento de Informática Bibliografía - Webgrafía • • • • • cupi2.uniandes.edu.co Apuntes de la UNLP – Facultad de Informática. Apuntes de Jesús Alonso S. – Dpt. OEI http://lml.ls.fi.upm.es/ed2 El Omnipresente Árbol-B. DOUGLAS COMER. Departamento de Ciencia Computacional, Universidad de Purdue, West Lafayette, Indiana 47907 101