热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

深入理解B树、B+树及B*树的数据结构与应用场景

本文深入探讨了B树、B+树和B*树的数据结构及其应用场景。B树是一种自平衡的搜索树,通过中序遍历可以确保数据的有序性。B+树在B树的基础上进行了优化,所有叶子节点都包含关键字,并且通过指针相连,便于区间查询。B*树则进一步改进了B+树,通过增加节点的填充因子来减少树的高度,提高磁盘读写的效率。这些数据结构广泛应用于数据库系统和文件索引中,以实现高效的数据存储和检索。

参考地址:这,这,这,这里
B树即B-树.B表平衡的意思.B树必须中序遍历,B+树,则叶子扫一遍即可.B+树支持区间查询.
*号,要放在反引号里面
定义:
有个阶数,即最大子节点数m. 关键字,从小到大排列.每个节点,存储键和值. 叶子节点,位于同一层. 每个关键字的左子树的关键字都小于自己,而右子树的关键字都大于自己.这一条所有的树都应该这样,为了二分法快速查找. 根节点子节点数为[2,m].其余为[m/2,m]节点数 节点,至少有(m-1)/2个关键字,至多m-1个.根节点至少1个关键字(2个子节点).注意这是关键字.m是最大子节点数. 注意区别关键字与子节点数.关键字=子节点数-1.
B树插入:
如果,关键字

其实,整个B树与B+树,B*树,所有二叉树,所有树,都是在实数上的.
他们的调整就是调整附近位置.再满足他们自己的限定条件.他们的位置无论如何调整,始终都是垂直不变的. 看起来调整了,不过是上下级的变化.他们的根本位置是不变的.因为他们都是实数上数值.根本就没变.

区间查询(数据库有用):查询5~10这个区间.B+树左边一个点,右边一个点,一把索.B树成功查询方便,因为节点短.
B+树的子节点(叶位置)都是连在一起的.所以可以一把索.相当于每个叶子的值都是手拉手的在实数上排列着的.
B树B+树的上层,其实因为经常查找,所以,都在内存缓冲着的.
B*树,在非根与非叶子节点处,再加上指向兄弟的指针.这样,兄弟也链接上了.即非叶子节点也相互手拉手了.
B*树,非叶子节点,>2m/3.
B+的+就是叶子结点是连着的.
B+树分裂:
分配新结点,复制原结点一半数据过去,父结点增加新结点指针,只影响父,新结点,不影响兄弟结点
B*数分裂:
先看兄弟结点,如未满,则一部分至兄弟结点,调整兄弟节点,再调整自己节点. 如满了,在原结点与兄弟结点中加新结点,各复制1/3数据过去,在父节点中增加新节点指针.
需要兄弟结点,所以,要有兄弟结点的链接指针,因而*就是叶子节点加上兄弟结点的意思.
也有基于频率B树.
二叉树比二分查找的优点是:改变结构时,只需要常数开销.,即方便增删.
平衡算法,保持插入后,树仍然是平衡的.
B树的节点与关键字的关系是:节点 关键字 节点 关键字 节点...的关系.
子节点,可能为空.即无内容的节点.
B树性能等价于二分查找.节点满时分裂成2个子节点,删结点时,不足时,要合并节点.
B*树,和另外一个节点,满足2/3时,分节点,不足时,合并结点.
B+树.从根部的节点的关键字,最终都压扁下放到叶子节点.,B+树就是非叶子结点,只起一个判定作用.叶子节点一层才是所有数据,从头到尾装满了实数线.更适用于文件索引.
B*树,B树再加上兄弟节点的指针,主要是为了更节省空间


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
author-avatar
lucia_8899_458
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有