当前位置: 首页 > news >正文

B树与B+树的对比

B树:

请添加图片描述
m阶B树的核心特性:

  1. 树中每个节点至多有m棵子树,即至多含有m-1个关键字
  2. 根节点的子树数属于[2, m],关键字数属于[1, m-1],其他节点的子树数属于 [ ⌈ m 2 ⌉ , m ] [\lceil \frac{m}{2}\rceil, m] [⌈2m,m],关键字数属于 [ ⌈ m 2 ⌉ − 1 , m − 1 ] [\lceil \frac{m}{2}\rceil-1, m-1] [⌈2m1,m1]
  3. 对任一节点,其所有子树高度都相同
  4. 关键字的值:子树0<关键字1<子树1<关键字2<…(类比二叉查找树 左<根<右)
  5. 所有叶节点都出现在同一层次上,且不带信息(可以视为外部节点或类似于折半查找判定树的查找失败节点,实际上这些节点不存在,指向这些节点的指针为空)

B+树

请添加图片描述
m阶B+树的核心特性:

  1. 通常在B+树上有两个头指针,一个指向根节点,另一个指向关键字最小的叶子节点。因此可对B+树进行两种查找运算,一种是从最小关键字起顺序查找,另一种是从根节点开始,进行随机查找
  2. 树中每个节点至多有m棵子树;(节点的子树个数与关键字个数相等)
  3. 根节点的子树数属于[2, m],其他节点的子树数属于 [ ⌈ m 2 ⌉ , m ] [\lceil \frac{m}{2}\rceil, m] [⌈2m,m];(节点的子树个数与关键字个数相等)
  4. 所有叶节点包含全部关键字及指向相应记录的指针,叶节点中将关键字按大小顺序排列,并且相邻叶节点按大小顺序相互链接起来(支持顺序查找)
  5. 所有分支节点中仅包含它的各个子节点中关键字的最大值及指向其子节点的指针
  6. B+树中,无论查找成功与否,最终一定都要走到最下面一层节点(对比B树的查找,查找成功情况下,可能停在任何一层)
  7. B+树中,非叶节点不含有该关键字对应记录的存储地址,因此可以使一个磁盘块包含更多个关键字,使得B+树的阶更大,树高更矮,读磁盘次数更少,查找更快。典型应用如关系型数据库的“索引”(如MySQL)

二者对比

-B树B+树
关键字数与子树数节点中的n个关键字对应n+1棵子树节点中的n个关键字对应n棵子树
节点的关键字数范围根节点的关键字数:[1, m-1],其他节点的关键字数[ ⌈ m 2 ⌉ \lceil\frac{m}{2}\rceil 2m-1, m-1]根节点的关键字数:[1, m],其他节点的关键字数[ ⌈ m 2 ⌉ \lceil\frac{m}{2}\rceil 2m, m]
节点重复性各节点中包含的关键字是不重复的叶节点包含全部关键字,非叶节点中出现过的关键字也会出现在叶节点中
节点的作用B树的节点中都包含了关键字对应的记录的存储地址叶节点包含信息,所有非叶节点仅起索引作用,非叶节点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针
来源m阶B树是二叉查找树的进化m阶B+树是分块查找的进化(进化为多级分块查找)
查找方式不支持顺序查找,查找成功时,可能停在任何一层节点,查找速度不稳定支持顺序查找,查找成功或失败都会到达最下一层节点,查找速度稳定

相同点:

  1. 除根节点外,都最少 ⌈ m 2 ⌉ \lceil\frac{m}{2}\rceil 2m个分叉(确保节点不要太空)
  2. 任何一个节点的子树都一样高(确保“绝对平衡”)
  3. 二者都是用于文件系统:
    • B树主要用作文件的索引,因此它的查找涉及外存的存取。具体来讲,在B树上进行查找包含两种基本操作:
      • 1)在B树中找节点:由于B树通常存储在磁盘上,因此查找操作1)是在磁盘上进行的
      • 2)在节点中找关键字:这一查找操作是在内存中进行的,即在磁盘上找到指针p所指节点后,先将节点中的信息读入内存,然后再利用顺序查找或折半查找查询等于K的关键字
      • 显然在磁盘上进行一次查找比在内存中进行一次查找耗费时间更多,因此在磁盘上进行查找的次数(即待查关键字所在节点在B树上的层次数)是决定B树查找效率的首要因素
    • B+树是应文件系统所需而出的一种B树的变型树
http://www.lryc.cn/news/246112.html

相关文章:

  • 关键路径-STL版/拓扑排序 关键路径【数据结构】
  • 最新AI创作系统ChatGPT系统运营源码,支持GPT-4图片对话能力,上传图片并识图理解对话,支持DALL-E3文生图
  • 小航助学题库蓝桥杯题库stem选拔赛(21年3月)(含题库教师学生账号)
  • [python]离线加载fetch_20newsgroups数据集
  • Python与设计模式--代理模式
  • ubuntu挂载磁盘,以及开机自动挂载磁盘
  • Jetpack Compose中适应性布局的新API
  • 小航助学题库蓝桥杯题库stem选拔赛(22年1月)(含题库教师学生账号)
  • 蓝桥杯第100 题 九宫幻方 DFS 全排列 C++ 解题思维
  • NOI / 1.10编程基础之简单排序 提问05:分数线划定 c语言 结构体
  • 再探Docker:从Docker基础到跨服务器部署
  • C# 使用PanGu分词
  • Termius 一款优秀的跨平台 SSH 客户端工具
  • 生命科学领域 - 新药从研发到上市全流程
  • 血的教训------入侵redis之利用python来破解redis密码
  • yolov8-pose 推理流程
  • 笔记十七、认识React的路由插件react-router-dom和基本使用
  • CleanMyMac X4.14.5Crack最新Mac电脑清理优化最佳应用
  • Linux shell单双引号区别
  • ES 8.x开始(docker-compose安装、kibana使用、java操作)
  • 有了倾斜摄影,如何搭建一座智慧城市?
  • 设计测试用例的具体方法总结
  • 计算机毕业设计|基于SpringBoot+MyBatis框架的仿天猫商城购物系统设计与实现
  • JAXB的XmlValue注解
  • Git版本管理(05) git仓库迁移(保留原来记录分支体系)
  • 科技与教育:未来教育的新趋势
  • E云管家微信群聊机器人开发
  • CVE-2023-27524:Apache Superset未授权访问漏洞复现
  • 机器学习——多元线性回归升维
  • [C/C++]用堆实现TopK算法