Professional Documents
Culture Documents
Árboles B
Roberto Abreu
18 de Octubre 2010
Santiago de los Caballeros - PUCMM
Información
Para 7400RPM, 1 rotación = 8.33msec
Información
Para 7400RPM, 1 rotación = 8.33msec
En RAM, el tiempo de acceso es 50nsec (5 órdenes de
magnitud menor)
Información
Para 7400RPM, 1 rotación = 8.33msec
En RAM, el tiempo de acceso es 50nsec (5 órdenes de
magnitud menor)
1 rotación completa = más de 100,000 accesos a RAM
Información
Para 7400RPM, 1 rotación = 8.33msec
En RAM, el tiempo de acceso es 50nsec (5 órdenes de
magnitud menor)
1 rotación completa = más de 100,000 accesos a RAM
Propiedades
1 Cada nodo x tiene los siguientes atributos:
1 x.n, el número de llaves actualmente almacenadas en x
Propiedades
1 Cada nodo x tiene los siguientes atributos:
1 x.n, el número de llaves actualmente almacenadas en x
2 Las x.n llaves mismas, x.key1 , x.key2 , ..., x.keyx.n almacenadas
en forma no decreciente.
Propiedades
1 Cada nodo x tiene los siguientes atributos:
1 x.n, el número de llaves actualmente almacenadas en x
2 Las x.n llaves mismas, x.key1 , x.key2 , ..., x.keyx.n almacenadas
en forma no decreciente.
3 x.leaf, verdadero si es una hoja
Propiedades
1 Cada nodo x tiene los siguientes atributos:
1 x.n, el número de llaves actualmente almacenadas en x
2 Las x.n llaves mismas, x.key1 , x.key2 , ..., x.keyx.n almacenadas
en forma no decreciente.
3 x.leaf, verdadero si es una hoja
2 x.n + 1 punteros x.c1 , x.c2 , ..., x.cx.n+1 a sus hijos.
Propiedades
1 Cada nodo x tiene los siguientes atributos:
1 x.n, el número de llaves actualmente almacenadas en x
2 Las x.n llaves mismas, x.key1 , x.key2 , ..., x.keyx.n almacenadas
en forma no decreciente.
3 x.leaf, verdadero si es una hoja
2 x.n + 1 punteros x.c1 , x.c2 , ..., x.cx.n+1 a sus hijos.
3 Si ki es cualquier llave almacenada en el sub-árbol con raı́z
x.ci , entonces:
k1 ≤ x.key1 ≤ k2 ≤ x.key2 ≤ ... ≤ x.keyx.n ≤ kx.n+1
Roberto Abreu Árboles B
Almacenamiento de Data Jerárquica en Disco
Introducción a los Árboles-B Ejemplo: B-Tree grado 2
Operaciones Básicas
Propiedades(2)
1 Todas las hojas están en el mismo nivel, el cual es la altura h.
Propiedades(2)
1 Todas las hojas están en el mismo nivel, el cual es la altura h.
2 Los nodos tienen lı́mites inferiores y superiores para las llaves
que contienen. Los lı́mites se expresan en términos de un
entero fijo t ≥ 2 llamado el grado mı́nimo del árbol-B:
1 Cada nodo distinto a la raı́z debe tener al menos t − 1 llaves.
Cada nodo interno debe tener por lo menos t hijos. Si el árbol
no está vacı́o, la raı́z debe tener al menos una llave.
Propiedades(2)
1 Todas las hojas están en el mismo nivel, el cual es la altura h.
2 Los nodos tienen lı́mites inferiores y superiores para las llaves
que contienen. Los lı́mites se expresan en términos de un
entero fijo t ≥ 2 llamado el grado mı́nimo del árbol-B:
1 Cada nodo distinto a la raı́z debe tener al menos t − 1 llaves.
Cada nodo interno debe tener por lo menos t hijos. Si el árbol
no está vacı́o, la raı́z debe tener al menos una llave.
2 Cada nodo puede contener a lo sumo 2t − 1 llaves. Por lo
tanto, un nodo interno puede tener a lo sumo 2t hijos.
Podemos decir que un nodo está lleno si contiene
exactamente 2t − 1 llaves.
Árbol 2-3-4
Árbol 2-3-4
Búsqueda
Pseudocódigo
B-TREE-SEARCH(x, k)
1 i=1
2 while i ≤ x.n and k > k.keyi
3 . i=i+1
4 if i ≤ x.n and k == x.keyi
5 . return (x, i)
6 elseif x.leaf
7 . return NIL
8 else DISK-READ(x.ci )
9 . return B-TREE-SEARCH(x.ci , k)
Inserción
Notas
En BST > buscamos la posición de la hoja correspondiente
para hacer la inserción
Inserción
Notas
En BST > buscamos la posición de la hoja correspondiente
para hacer la inserción
No podemos hacer eso en árboles-B: no serı́a un árbol-B
Inserción
Notas
En BST > buscamos la posición de la hoja correspondiente
para hacer la inserción
No podemos hacer eso en árboles-B: no serı́a un árbol-B
Cómo Insertar
Insertamos siempre en hojas, nunca en nodos internos
Si la hoja está llena, dividimos la hoja llena (2t − 1 llaves)
por su llave mediana:
En dos nodos de t − 1 llaves.
La llave mediana se mueve al padre de la hoja
Si el padre también está lleno, se divide y esto se puede repetir
hasta llegar a la raı́z
Mientras buscamos, podemos ir dividiendo nodos
internos llenos según atravesamos el camino.
Roberto Abreu Árboles B
Almacenamiento de Data Jerárquica en Disco
Búsqueda
Introducción a los Árboles-B
Inserción
Operaciones Básicas
Dividiendo a Un Nodo
Cómo Dividir
En pocas palabras, se divide el nodo en dos y se acomoda el
valor mediano del nodo original dentro del padre.
Para dividir a una raı́z llena, hacemos primero a la raı́z hija del
nodo nuevo.
En todo caso, fijarse que el árbol crece en altura por uno,
siempre.
Operación: B-TREE-SPLIT-CHILD
Operación: B-TREE-INSERT
Operación: B-TREE-INSERT-NONFULL