5.多路查找树
多路查找树
- 2-3树
- 2-3-4树
- B树
- B+树
多叉树:
- 树的每个节点可以有超过2个子节点
- 举例:2-3树、2-3-4树、B树、B+树
概念:
阶数(Order)
,对于一颗M阶
B树,一个节点最多包含M个子节点
B树(Balanced Tree
):
- B树是多路平衡查找树的一种特殊类型
- B 是Balance的意思
M阶
B树 特点:- 每个节点最多包含
M
个子节点。 - 根节点至少包含
2
个子节点(或者0个子节点) - 每个非叶节点至少包含
ceil(M/2)
个子节点; - 拥有 k 个子节点的非叶节点将包含 k - 1 条记录
所有叶节点都在同一层中
- 每个节点最多包含
- B树的优点:
- 相对平衡二叉树,节点的空间的利用率更高
- 对
访问局部性原理
的利用(预读机制)
- B树缺点:
- 查询范围数据时,必须按照树的中顺遍历来访问各个节点
- 查询范围数据时,必须按照树的中顺遍历来访问各个节点
B+树:
- B+树是B树的优化版本,也是多路平衡查找树的一种特殊类型
- 特点:
- 只有叶子节点存储真实的数据,非叶节点只存储键(B树每个节点都存数据)
- 一条记录可以重复出现,比如在叶子节点和非叶子节点都出现(B树不可以重复出现)
- 叶节点之间通过双向链表链接(Mysql中实际非叶子节点也通过双向链表相连接)
- 非叶子节点的子节点数=关键字数(Mysql),或者非叶节点的关键字数=子节点数-1
- 对B树的优化:
- B+树的层级更少
- B+树查询速度更稳定
- B+树天然具备排序功能
- B+树全节点遍历更快,只需要遍历叶子节点
- 缺点:
- 为了保持树的平衡,节点的合并、拆分操作比较耗时(Mysql页分裂、页合并)
B*树:
- B*树是B+树的变体
- 特点:
- 在B+树的非根和非叶子结点再增加指向兄弟的指针
B*
树定义了非叶子结点元素个数至少为(2/3)*M
,即块的最低使用率为2/3;B+树为(1/2)*M
- 主要缓解了B+树的页分裂问题:
- B*树节点满时会检查兄弟节点是否满(每个节点都有指向兄弟的指针)
- 如果兄弟节点未满则向兄弟节点转移关键字
- 如果兄弟节点已满,则从当前节点和兄弟节点各拿出1/3的数据创建一个新的节点出来
查找树的演进:
本文作者:navyum
本文链接:https://www.cnblogs.com/navyum/p/18509360
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步