数据结构b-树和b+树_A票领导B票算法

数据结构b-树和b+树_A票领导B票算法一、什么是多路查找树二叉树有诸多便利之处,但是当二叉树节点极多时,二叉树的构建速度就会受影响,而且过高的层数也会导致对树的操作效率降低。对于树的查找而言,树的高度决定了查找的时间下限,但是同样数量

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、什么是多路查找树

二叉树有诸多便利之处,但是当二叉树节点极多时,二叉树的构建速度就会受影响,而且过高的层数也会导致对树的操作效率降低。

过多节点的二叉树

对于树的查找而言,树的高度决定了查找的时间下限,但是同样数量的节点,如果要高度小那每一层容纳的节点就要多,而二叉树每一层固定的节点数导致的高度难以降低,为此每一个节点都能拥有多个子节点的多叉树(multi way tree)就出现了.

多叉树

B树,B+树都是多叉树

二、B树

B树也称B-树,它是一颗多路平衡查找树。

2-3树是最简单的B树,它具有以下特点:

  • 2-3树的所有叶子节点都在同一层(只要是B树都满足该条件)
  • 有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点。三节点本身包含两个数据
  • 有三个子节点的节点叫三节点三节点要么没有子节点要么有三个子节点。二节点本身包含一个数据项
  • 2-3树是由二节点和三节点构成的树。

我们以数列{16,24,12,32,14,26,34,10,8,28,38,20}构建2-3树为例:

image-20200725183108854

对于2-3树插入的特点,我们举几个具有代表性的例子:

  • {16}插入24:由于24大于16,又16是一个二节点,他要么有两个值节点要么没有节点,所以只能插到16节点里,变成一个三节点
  • {16,24}插入12:由于12小于16,又[16|24]是一个三节点,所以将[16|12]拆开,以16为父节点,24为右子节点,12作为为左子节点插入
  • {16,24,12,32,14,26,34}插入10:按顺序找到[12|14]节点,将三节点拆开后,以12为父节点,14为左子节点,10作为为左子节点插入,由于插入10以后,树的所有叶子节点就不在同一层了,所以需要对其他子树进行调整,将[16|26]拆开,将26变为16的右子节点,原本的24与[32,34]节点变为24的左右子节点

除了2-3树以外,还有一种2-3-4树也是B树的一种,相比2-3树,它多了一个包含能3个数据项与四个子节点的四节点:

image-20200725185527418

由于B树的关键字集合可以分布在整颗树上,如果查找的数据离根节点很近,此时查找会比B+树快

三、B+树

image-20200725192414148

B+树具有以下特点:

  • B+树只有叶子节点存放数据(稠密索引),而非叶子节点只作为索引(稀疏索引),这使得非叶子节点所能保存的关键字大大增加
  • B+树的叶子节点存放的数据是有序的

相对B树,B+具有以下优点

  1. B+树查询速度更稳定:B+所有关键字数据地址都存在叶子节点上,所以每次查找的次数都相同
  2. B+树的层级更少:相较于B树B+每个非叶子节点存储的关键字数更多,树的层级更少所以查询数据更快;
  3. B+树天然具备排序功能:B+树所有的叶子节点数据构成了一个有序链表,在查询大小区间的数据时候更方便,数据紧密性很高,缓存的命中率也会比B树高
  4. B+树全节点遍历更快:B+树遍历整棵树只需要遍历所有的叶子节点即可,而不需要像B树一样需要对每一层进行遍历,这有利于数据库做全表扫描

也由于这些优点,在mysql中,索引实现是基于B+树的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170800.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月16日 下午10:00
下一篇 2022年8月16日 下午10:00


相关推荐

  • DeepSeek + LangGraph + Chat UI:轻松搭建本地智能助手

    DeepSeek + LangGraph + Chat UI:轻松搭建本地智能助手

    2026年3月16日
    2
  • java二分法查找_java实现二分法查找

    java二分法查找_java实现二分法查找什么是二分法查找 二分法也就是折半查找 在有序的数列中查找指定的元素 设定最小索引 low 和最大索引 height 1 还有中间值 mid low height 1 2 这种查找 如果中间值比指定元素小让 low mid 1 如果中间值比指定元素大 让 height mid 1 代码实现 免费视频教程分享 java 视频教程 importjava util ArrayList importj

    2026年3月17日
    2
  • (Android) 如何使用HOOK实现动态注入以及自动化操作

    (Android) 如何使用HOOK实现动态注入以及自动化操作Android 如何使用 HOOK 实现动态注入以及自动化操作为什么会有这边博文 最近一直在搞一些 apk 激活成功教程以及自动化方面的东西 觉得有必要记录一下 也是为了修改下自己懒的毛病 很久很久很久没更新博客了 一 项目需求项目功能 本文将使用为例 利用 Hook 实现自动登录 自动退出登录功能项目流程 流程比较简单二 资源准备大致需要准备以下东西 一台空闲的安卓手机 能 roo

    2026年3月17日
    2
  • 全面预算管理——财务实操到SAP BPC 系统实现

    全面预算管理——财务实操到SAP BPC 系统实现引言 从实务操作的角度介绍了全面预算为何做 如何编 如何管以及结果如何用等内容 如何从财务管理实现到 SAPBPC 系统落地 也就是梳理从财务管控概念目标到结合系统流程固化 End2EndSolut 搭建以服务客户为中心 通过流程化数字化管控的新型组织体系 从实务操作的角度介绍了全面预算为何做 如何编 如何管以及结果如何用等内容 如何从财务管理实现到 SAPBPC 系统落地 也就是梳理从财务管控概念目标到结合系统流程固化 End2EndSolut 搭建以服务客户为中心 通过流程化

    2025年10月13日
    7
  • 数据仓库之电商数仓– 3.1、电商数据仓库系统(ODS层、DIM层、DWD层)

    数据仓库之电商数仓– 3.1、电商数据仓库系统(ODS层、DIM层、DWD层)目录一、数仓分层1.1为什么要分层1.2数据集市与数据仓库概念1.3数仓命名规范1.3.1表命名1.3.2脚本命名1.3.3表字段类型二、数仓理论2.1范式理论2.1.1范式概念2.1.2函数依赖2.1.3三范式区分2.2关系建模与维度建模2.2.1关系建模2.2.2维度建模⭐️2.3维度表和事实表⭐️2.3.1维度表2.3.2事实表2.4维度模型分类2.5数据仓库建模⭐️????2.5.1ODS层2.5.2DIM层和DWD层2.5.3DWS层与DWT层2.5.4

    2022年6月26日
    31
  • FM和FFM原理

    FM和FFM原理模型用途FM和FFM,分解机,是近几年出的新模型,主要应用于广告点击率预估(CTR),在特征稀疏的情况下,尤其表现出优秀的性能和效果,也数次在kaggle上的数据挖掘比赛中拿到较好的名次。FM原理特征编码时常用的one-hot编码,会导致特征非常稀疏(很多0值)。常用的特征组合方法是多项式模型,模型表达式如下: y(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1nwijxixjy(x)=w…

    2022年5月20日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号