0x01. B树
1.大数据
越来越小的内存:系统存储容量的增长速度 << 问题规模的增长速度
事实1: 不同容量的存储器,访问速度差异悬殊。若一次内存访问需要一秒,则一次外存访问需要一天。->使用cache
事实2: 从磁盘中读取1B,几乎与读取1KB一样快->以页(page)或块(block)为单位,使用缓冲区->单位字节的平均访问时间大大缩短。
2.结构
兄弟既翕,和乐且湛。–《诗经·小雅·棠棣》
B树其实就是平衡的多路搜索树的一种等价变换,把搜索树的d代“压扁”,合并成超级节点。每个超级节点有
m
=
2
d
m=2^d
m=2d路,有
m
−
1
m-1
m−1个关键码。
既然逻辑上与BBST等价,那么B树的意义何在?
所谓m阶B树,就是含有小于等于m-1个关键码的树。每个超级节点含有的孩子数取值在
⌈
m
2
⌉
\lceil \frac{m}{2} \rceil
⌈2m⌉到
m
m
m之间。
3.查找
4. 插入
清醒让我,分裂再分裂 --《边界1999》
将关键码插入到正确位置之后,如果上溢(节点个数超过了m-1),需要分裂。注意,上溢可能持续传播,最坏情况持续到根。
5.删除
删除一个节点,可能发生下溢(节点的分支数< ⌈ m 2 ⌉ \lceil \frac{m}{2} \rceil ⌈2m⌉)。为了解决下溢,有两种方法:旋转和合并。
旋转
合并
举例: