B-Tree es un árbol multi-way auto-balanceado diseñado para sistemas de almacenamiento en bloque (discos, bases de datos). Cada nodo puede tener muchos hijos (branching factor t), reduciendo la altura del árbol y minimizando accesos a disco.
Es la estructura estándar para database indexing y filesystems.
Propiedades
Con grado mínimo t ≥ 2:
- Cada nodo (excepto raíz) tiene al menos
t-1keys y al menostchildren. - Cada nodo (excepto raíz y hojas) tiene a lo sumo
2t-1keys y2tchildren. - Todas las hojas están al mismo nivel.
Estructura de Nodo
Cada nodo contiene:
keys[0..k-1]: valores ordenados.children[0..k]: punteros a subárboles.leaf: booleano indicando si es hoja.
Split
Cuando un nodo se llena con 2t-1 keys y debes insertar uno nuevo, divides el nodo en dos:
- Crea nuevo nodo.
- Mueve
t-1keys del medio al nuevo nodo. - La key del medio sube al padre.
- Si el padre se llena, recursivamente split hacia arriba.
Merge
Cuando un nodo tiene solo t-1 keys (mínimo) y pierde un key (por delete), puedes fusionar con un sibling:
- Toma key del padre y añade al nodo.
- Fusiona con sibling.
- Si el padre queda con < t-1 keys, recursivamente merge hacia arriba.
Comparación con BST
| Propiedad | BST | B-Tree (t=100) |
|---|---|---|
| Branching factor | 2 | 100 |
| Altura para n=1M | ~20 | ~3 |
| Accesos disco | ~20 | ~3 |
| Uso | En memoria | En disco |
B+ Tree
Variante donde:
- Los datos (registros) están solo en las hojas.
- Los nodos internos solo tienen keys para guiar la búsqueda.
- Las hojas están enlazadas (range scan eficiente).
Aplicaciones
- Databases — MySQL InnoDB, PostgreSQL indexes usan B+ trees.
- Filesystems — NTFS, HFS+, ext4 usan B-trees para directorios.
- LDAP — directorios jerárquicos.
- Enseñanza — introduce I/O-efficient data structures.
Trayectoria de Práctica
- Investiga B-Tree con t=3; traza insert y split.
- Investiga B+ Tree: ¿por qué las hojas enlazadas mejoran range queries?
- ¿Por qué B-Tree es mejor que BST en disco?
- Investiga LSM-tree: ¿cómo optimiza writes?
- Investiga fractal tree: ¿qué ventaja tiene over B+ tree?