目录:
一:2-3 树
1.定义
每个结点都具有两个孩子(我们称它为 2 结点)或三个孩子(我们称它为 3 结点)的树
一个 2 结点 包含一个元素和两个孩子(或没有孩子)
且左子树数据元素小于该元素
右子树数据元素大于该元素
一个 3 结点 包含一小一大两个元素和三个孩子(或没有孩子)
如果有 3 个孩子的话
左子树包含小于较小元素的元素
右子树包含大于较大元素的元素
中间子树包含介于两元素之间的元素
2.图形化解释
下图即为一个 2-3 树 图:
二: 2-3-4 树
定义
其为 2-3 树 的扩展
在其基础上增加一个 4 结点 的使用
一个 4 结点 包含小中大三个元素和四个孩子(或没有孩子)
如果某个 4 结点有孩子的话
左子树包含小于最小元素的元素
第二子树包含大于最小元素,小于第二元素的元素
第三子树包含大于第二元素,小于最大元素的元素
右子树包含大于最大元素的元素
三:B 树(B-tree)
定义
其是一种平衡的多路查找树
2-3 树 和 2-3-4 树 都是 B 树 的特例
结点最大的孩子数目称为 B 树 的阶(order)
因此
2-3 树 为 3 阶 B 树
2-3-4 树 为 4 阶 B 树
四: B+ 树
定义
其是应文件系统所需而出的一种 B 树 的变形树
在 B 树 中
每一个元素在该树中只出现一次
有可能在叶子结点上
也有可能在分支结点上
而在 B+ 树 中
出现在分支结点中的元素会被当作它们在该分支结点位置的中序后继者(叶子结点)中再次列出
另外,每一个叶子结点都会保存一个指向后一叶子结点的指针
五: B 树 减少这种内外存交互
1.传统的硬盘处理
对于海量数据,数据一般都保存到外存(eg:硬盘)中
每次需要数据时,再读取到内存中
因此,如果内存与外存交换数据次数频繁,就会造成时间效率上的瓶颈
2. B 树处理
而使用 B 树 可以减少这种内外存交互:
我们的外存,比如硬盘,是将所有的信息分割成相等大小的页面,每次硬盘读写的都是一个或多个完整的页面
对于一个硬盘来说,一页的长度可能是 211 到 214 个字节
3.思路方法
在一个典型的 B 树 应用中,要处理的硬盘数据量很大,因此无法一次全部装入内存
因此我们会对 B 树 进行调整
使得 B 树 的阶数(或结点的元素)与硬盘存储的页面大小相匹配
比如说一棵 B 树 的阶为 1001(即 1 个结点包含 1000 个关键字),高度为 2,它可以储存超过 10 亿个关键字
我们只要让根结点持久地保留在内存中
那么在这棵树上,寻找某一个关键字至多需要两次硬盘的读取即可
通过这种方式
在有限内存的情况下,每一次磁盘的访问我们都可以获得最大数量的数据
可以说,B 树的数据结构就是为内外存的数据交互准备的