十五、多路查找树

news2025/7/20 0:49:32

1、二叉树与B树

1.1 二叉树的问题分析

二叉树的操作效率较高,但是也存在问题,请看下面的二叉树
在这里插入图片描述
二叉树需要加载到内存中,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿),就存在如下问题:

  • 问题1:在构建二叉树时,需要多次进行IO操作(海量数据存在数据库或文件中,节点海量,构建二叉树时,速度有影响)
  • 问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度

1.2 多叉树

在二叉树中,每个节点都有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(Multiway tree)
后面我们讲解的2-3树、2-3-4树就是多叉树,多叉树通过重新组织节点,减少树的高度,能对二叉树进行优化

举例说明(下面2-3树就是一颗多叉树)
在这里插入图片描述

1.3 B树的基本介绍

B树通过重新组织节点,降低树的高度,并且减少IO读写次数来提升效率(如下图所示,就是一个B树)

在这里插入图片描述
如上图所示,B树通过重新组织节点,降低了树的高度
文件系统及数据库的设计者利用了磁盘预读原理,将一个节点的大小设为等于一个页的大小(页的大小通常为4k),这样每个节点只需要一次IO就可以完全载入

将树的度M设置为1024,在600亿个元素中,最多只需要4次IO操作就可以读取到想要的元素,B树(B+树)广泛应用于文件存储系统以及数据库系统中。

2、 2-3树

2.1 基本介绍

  • 2-3树的所有叶子节点都在同一层(只要是B树都满足这个条件)
  • 有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点
  • 有三个子节点的节点叫三节点,三节点要么没有子节点,要么有三个子节点
  • 2-3树是由二节点和三节点构成的树

2.2 应用案例

将数列{16,24,12,32,14,26,34,10,8,28,38,20}构建成2-3树,并保证数据插入的大小顺序(演示一下构建2-3树的过程)
在这里插入图片描述
插入规则:

  • 2-3树的所有叶子节点都在同一层(只要是B树都满足这个条件)
  • 有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点
  • 有三个子节点的节点叫三节点,三节点要么没有子节点,要么有三个子节点
  • 当按照规则插入一个数到某个节点时,不能满足上面三个要求,就需要拆,先向上拆,如果上层满,则拆本层,拆后仍然需要满足上面3个条件
  • 对于三节点的子树的值大小仍然遵守(BST二叉排序树)的规则

2.3 其他说明

除了2-3树,还有2-3-4树,概念和2-3树类似,也是一种B树,如下图所示:
在这里插入图片描述

3、B树、B+树和B*树

3.1 B树的介绍

B树中的B是平衡(Balanced)的意思。有人把B-tree翻译成B-树,容易让人产生误解,会以为B-树是一种树,而B树又是另一种树,实际上,B-tree就是指B树。

前面已经介绍了2-3树和2-3-4树,他们就是B树(英语:B-tree 也写成B-树),这里我们就再做一个说明,我们在学习Mysql时,经常听到说某种类型的索引是基于B树或者B+树额,如图:

在这里插入图片描述
B树的说明:

  • B树的阶:节点的最多子节点个数。比如2-3树的阶是3,2-3-4树的阶是4
    在这里插入图片描述

3.2 B+树的介绍

在这里插入图片描述

3.3 B*树的介绍

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/368801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用antlr实现一个简单的表达式解析

背景 之前在做游戏的过程中,我们经常需要解析一些公式,比如(对方攻击值-对方防御值)*2这种表达式,我们习惯于用代码写死公式,但是这种方式不够灵活,我们想要的是一种灵活的解析方式, 只需要策划输入一个任…

教师管理系统的设计与实现

技术:Java、JSP等摘要:1.1 计算机管理教师的意义近年来,随着经济的发展,教育正面向着大型化、规模化的方向发展,教师数量急剧增加,有关教师的各种信息量也成倍增长。在这种情况下用计算机可使人们从繁重的劳…

微机原理复习(周五),计算机组成原理图

1.计算机由运算器,控制器,存储器,输入设备,输出设备等5大基本部件组成。 2.冯诺依曼提出存储设计思想是:数字计算机的数制采用二进制,存储程序,程序控制。 3.计算机的基本组成框图&#xff1a…

什么是分组柱状图?

柱形图是我们做数据分析时最常用的图表类型之一,很多时候都需要制作分组展示的柱形图,以分类别的展示各种维度的数据情况。上文我已经介绍过堆叠柱状图,因此本文将分享分组柱形图的知识。 分组柱状图,又叫聚合柱状图。当使用者需要…

正点原子linux驱动篇

linux驱动开发与裸机开发的区别 裸机直接操作寄存器,有些mcu提供了库,但还是很底层 1、linux驱动开发直接操作寄存器很麻烦不现实,主要是根据linux驱动框架进行开发(就是有很多操作都是一样的,我们只需要对一个程序模…

linux安装nodejs和微信小程序自动化部署操作

一.运行环境安装 Node.js 并且版本大于 8.0基础库版本为 2.7.3 及以上开发者工具版本为 1.02.1907232 及以上安装node.js(1).下载node包官网地址:https://nodejs.org/en/download/如果英文不好的,可以看中文网站:https://nodejs.org/zh-cn/download/点击上面的进行下载,当然,也…

国产音质好的蓝牙耳机有哪些?国产音质最好的耳机排行

随着时间的推移,真无线蓝牙耳机逐渐占据耳机市场的份额,成为人们日常生活中必备的数码产品之一。蓝牙耳机品牌也多得数不胜数,哪些国产蓝牙耳机音质好?下面,我们从音质出来,来给大家介绍几款国产蓝牙耳机&a…

Quartus II 的入门级使用

好久没有用VHDL写东西了,今天需要完成一个项目,重新复习一下新建工程新建工程file-->New Project Wizard, next, 选择存放的路径名字(projecttop-level 名字要相同),next,File name名字同上,…

【一看就会】实现仿京东移动端页面滚动条布局

简单粗暴直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" content&q…

matlab simulink 模糊控制蔬菜气雾栽培营养液供给自动监控

1、内容简介略-可以交流、咨询、答疑2、内容说明模型基本数学公式参考的是硕士论文摘要&#xff1a;随着社会的发展&#xff0c;世界人口逐渐增加&#xff0c;耕地面积日益减少&#xff0c;而且人们对 优质、安全、无污染的蔬菜需求也越来越高&#xff0c;植物工厂成为蔬菜栽培…

MyBatis学习笔记(五) —— MyBatis获取参数值的两种方式

5、MyBatis获取参数值的两种方式 MyBatis获取参数值的两种方式&#xff1a;${} 和 #{} ${} 的本质就是字符串拼接&#xff0c; #{} 的本质就是占位符赋值 ${} 使用字符串拼接的方式拼接sql&#xff0c;若为字符串类型或日期类型的字段进行赋值时&#xff0c;需要手动加单引号&a…

【数据挖掘实战】——家用电器用户行为分析及事件识别

项目地址&#xff1a;Datamining_project: 数据挖掘实战项目代码 目录 一、背景和挖掘目标 1、问题背景 2、原始数据 3、挖掘目标 二、分析方法与过程 1、初步分析 2、总体流程 第一步&#xff1a;数据抽取 第二步&#xff1a;探索分析 第三步&#xff1a;数据的预处…

mysql 中关于慢查询日志

慢查询日志 慢查询日志主要用来记录执行时间超过设置的某个时长的SQL语句&#xff0c;能够帮助数据库维护人员找出执行时间比较长、执行效率比较低的SQL语句&#xff0c;并对这些SQL语句进行针对性优化。 开启慢查询 可以在 my.cnf 文件或者 my.ini 文件中配置开启慢查询日志…

数影周报:动视暴雪疑似数据泄露,数据出境安全评估申报最新进展

本周看点&#xff1a;动视暴雪疑似员工敏感信息及游戏数据泄露&#xff1b;谷歌云计算部门&#xff1a;两名员工合用一个工位&#xff1b;数据出境安全评估申报最新进展&#xff1b;TikTok Shop东南亚商城在泰国和菲律宾公布&#xff1b;智己汽车获九大金融机构50亿元贷款签约.…

可观测性最佳实践|阿里云事件总线 EventBridge 最佳实践

本文介绍如何把阿里云事件总线 EventBridge 的内容接入观测云平台&#xff0c;通过观测云强大的统一汇聚能力轻松获取阿里云事件&#xff0c;实时追踪最新的数据信息。 背景信息 事件总线 EventBridge 是阿里云提供的一款无服务器事件总线服务&#xff0c;支持阿里云服务、自定…

Python实现某du文库vip内容下载,保存成PDF

前言 是谁&#xff0c;是谁在网页上搜索往年考试卷题答案的时候只能阅读前两页的选择题&#xff0c;是谁在搜几千字的文档资料只能看25%&#xff0c;是谁在百度文库找七找八的时候所有的东西都要付费才能继续看… 我先说 是我自己 我又不经常用&#xff0c;只有偶尔需要看看…

redis集群介绍、部署

一&#xff1a;redis集群介绍 1.1 单实例的Redis缓存存在的问题 1.1.1 写并发 Redis单实例读写分离可以解决读操作的负载均衡&#xff0c;但对于写操作&#xff0c;仍然是全部落在了master节点上面&#xff0c;在海量数据高并发场景&#xff0c;一个节点写数据容易出现瓶颈&…

python 自动化测试 pytest 的使用

pytest 是一款以python为开发语言的第三方测试&#xff0c;主要特点如下&#xff1a; 比自带的 unittest 更简洁高效&#xff0c;兼容 unittest框架 支持参数化 可以更精确的控制要测试的测试用例 丰富的插件&#xff0c;已有300多个各种各样的插件&#xff0c;也可自定义扩…

论文投稿指南——中文核心期刊推荐(综合性经济科学 2)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

JavaScript 测试 Prototype

文章目录JavaScript 测试 Prototype引用 PrototypePrototype 描述测试 PrototypeJavaScript 测试 Prototype 测试 JavaScript 框架库 - Prototype 引用 Prototype 如需测试 JavaScript 库&#xff0c;您需要在网页中引用它。 为了引用某个库&#xff0c;请使用 <!DOCTYP…