一、B树
1.B树的定义
B树,又称多路平衡查找树,B树中所有节点的孩子个数的最大值称为B树的阶,通常用m表示。一颗m阶B树或为空树,或为满足如下特性的m叉树:
(1)树中每个节点至多有m棵子树,即至多含有m-1个关键字。
(2)若根节点不是终端结点,则至少有两棵子树。
(3)除根节点外的所有非叶节点至少有⌈m/2⌉棵子树,即至少含有⌈m/2⌉-1个关键字。(⌈⌉表示向上取整,例如⌈1.001⌉ = 2)
(4)所有的叶结点都出现在同一层次上,并且不带信息,即指向叶子结点的指针为空。
(5)关键字的值:子树0<关键字1<子树1<关键字2<子树2<...(以此类推,类比二叉查找树 左<中<右)
很多人看到这些定义非常懵逼,包括我刚开始看见这么多定义的第一反应是,为什么这样定义,为什么要限制子树的个数和关键字的个数呢?这些特性呢,实际上是B树为了保证查找的效率而采取的一种策略。
二叉查找树相信大家都比较好理解,当我们在二叉查找树中查找某一个数时,我们首先会和当前节点比较,如果该数比当前节点小,则去它的左子树中继续去找,如果比当前节点大,则去它的右子树中去找,直到找到或者查找失败,查找失败所在的叶子节点就是这个数所在的被该二叉查找树的节点所划分出来的范围。
比如说我找20,最后会指向19这个节点的右子树,这个右子树所代表的范围就是(19,29)。
举个例子来说,数据库大家肯定都不陌生,比如现在有一张表,其中有100万条记录,现在要查找查找其中的某条数据,如何快速地从100万条记录中找到需要的那条记录呢?大家的第一反应肯定是二叉查找树,下面先谈谈为什么二叉树不行。
如果使用二叉查找树,那么这个二叉查找树的高度为
也就是说,要找到我们需要的那条数据,最差的情况下可能要进行20次比较,并且在数据库中,我们的数据量可能更加庞大,并且一般来说,表的索引本身也很大,不可能全部存储在内存中,一般要存储在磁盘上,用的时候再读入到内存,比较一次大小&#x