B树是平衡树的一种,主要用于操作存储在磁盘等二级存储设备上的大量数据。相比起内存(主存)来说,磁盘操作的速度非常慢(慢几个数量级),所以涉及到存储在磁盘的数据的时候,尽量减少磁盘的读取和写入操作对于提高操作速度是非常重要的。B树就是针对这个特点进行设计以满足相应要求的。 B树的性质: •1. B树内的每一个节点x都具有以下字段: ◦当前存储在节点x中的关键字(key)个数n[x]。 ◦存储在x节点中的n[x]个关键字是以非降序的顺序排列的,即:key1[x] ≤key2[x]......≤keyn[x][x]。 ◦ 一个表示x节点否是叶节点的bool值leaf[x]。 •2. 每个内节点拥有指向n[x]+1个指向叶节点的指针,c1[x],c2[x]......cn[x]+1[x]。叶节点没有ci[x]域 •3. 节点x的key值,将子节点的key值范围分开了。如果ki是ci[x]指向的子节点的任意一个key的值,那么有: k1 ≤ key1[x] ≤ k2 ≤ key2[x] ≤ ≤ keyn[x][x] ≤ kn[x]+1. •4. 所有的叶节点具有相同的深度,这个深度也就是树高h。 •5. 一个节点可容纳的关键字数目是有上下限的。这个界限可以用包含一个大于2的整数t的表达式来表示,这个数t称为B树的最小度。 ◦除根节点外,每个节点至少要包含t-1个关键字(key),每个内节点(除根外)至少要包含t个关键字。一棵非空的B树,根节点至少要包含一个key。 ◦每个节点最多包含2t-1个关键字,因此,内节点最多有2t个子节点。对于一个包含2t-1个关键的节点,我们就称这个节点满了。 B树的每个节点都会拥有大量的子节点,而B树树高也很小。一般情况下,每个节点都会存储大量的关键字,使得节点大小接近磁盘页面大小,因为磁盘读取一个页面的数据时,相对会快一些(由于机械结构方面的原因,读取连续一个页面的数据,机械臂移动很小)。另外,根据B树的构造方式,节点的关键越多,也就能拥有越多的子节点,这对降低B树的高度很关键,B树的树高越小,那么读取磁盘的操作也会越少。速度也就相应得到提高。 B树的高度: h
《算法导论》笔记--B树
最新推荐文章于 2024-11-14 19:06:32 发布