14.数据结构之多路查找树与堆

news/2024/10/19 15:38:15/

前言

之前介绍的都是二叉查找树,二叉树一个节点最多有两个子节点,那么多于两个节点是什么情况呢,这就是我们本节要介绍的多路查找树。

多路查找树,也是我们数据库mysql底层索引维护方式。下面,我们来详细介绍。

1. B 树

1.1 定义

1.1.1 多路查找树

多路查找树(muitl-way search tree),其每一个节点的孩子数可以多于两个,且每一个节点处可以存储多个元素。

1.1.2 B 树

B树(BalanceTree)是对二叉查找树的改进。它的设计思想是,将相关数据尽量集中在一起,以便一次读取多个数据,减少硬盘操作次数。
在这里插入图片描述

1.2 特征

一棵m阶的B 树 (m叉树)的特性如下:

  1. B树中所有节点的孩子节点数中的最大值称为B树的阶,记为M
  2. 树中的每个节点至多有M棵子树 —即:如果定了M,则这个B树中任何节点的子节点数量都不能超过M
  3. 若根节点不是终端节点,则至少有两棵子树
  4. 除根节点和叶节点外,所有点至少有m/2棵子树
  5. 所有的叶子结点都位于同一层

2. B+ 树

在这里插入图片描述

2.1 特征

B+树是B-树的变体,也是一种多路搜索树,其定义基本与B树相同,它的自身特征是:

  1. 非叶子结点的子树指针与关键字个数相同
  2. 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树
  3. 为所有叶子结点增加一个链指针
  4. 所有关键字都在叶子结点出现

2.2 B和B+的区别

  1. B树和B+树的最大区别在于非叶子节点是否存储数据的问题。
  2. B树是非叶子节点和叶子节点都会存储数据。
  3. B+树只有叶子节点才会存储数据而且存储的数据都是在一行上,而且这些数据都是有指针指向的,也就是有顺序的。

2.3 应用

2.3.1 MySQL索引B+Tree

  1. B树是为了磁盘或其它存储设备而设计的一种多叉平衡查找树
  2. B树的高度一般都是在2-4这个高度,树的高度直接影响IO读写的次数
  3. 如果是三层树结构,支撑的数据可以达到20G;如果是四层树结构,支撑的数据可以达到几十T

3. 二叉堆

二叉堆本质上是一种完全二叉树,它分为两个类型

3.1 定义

3.1.1 大顶堆(最大堆)

最大堆的任何一个父节点的值,都大于或等于它左、右孩子节点的值。
在这里插入图片描述

3.1.2 小顶堆(最小堆)

最小堆的任何一个父节点的值,都小于或等于它左、右孩子节点的值。
在这里插入图片描述

3.2 存储原理

完全二叉树比较适合用数组来存储。用数组来存储完全二叉树是非常节省存储空间的。因为不需要存储左右子节点的指针,单纯地通过数组的下标,就可以找到一个节点的左右子节点和父节点。
在这里插入图片描述
如上图所示,数组中下标为 i 的节点的左子节点,就是下标为 i∗2 的节点,右子节点就是下标为 i∗2+1 的节点,父节点就是下标为 i/2 取整的节点。

3.3 二叉堆的典型应用

  1. 优先队列
  2. 利用堆求 Top K问题
    在一个包含 n 个数据的数组中,我们可以维护一个大小为 K 的小顶堆,顺序遍历数组,从数组中取出数据与堆顶元素比较。如果比堆顶元素大,我们就把堆顶元素删除,并且将这个元素插入到堆中;如果比堆顶元素小,则不做处理,继续遍历数组。这样等数组中的数据都遍历完之后,堆中的数据就是前 K 大数据了

http://www.ppmy.cn/news/239841.html

相关文章

凝聚全球顶尖力量,助力开源行业发展 | 2023开放原子全球开源峰会开幕式暨高峰论坛亮点抢先看!

亮点攻略 一触即发 6月11-13日|中国北京 作为开源领域一年一度的盛事,由2023全球数字经济大会组委会主办,开放原子开源基金会、北京市经济和信息化局、北京经济技术开发区管理委员会承办的2023开放原子全球开源峰会将于6月11日至13日在北京…

微信小程序| 基于ChatGPT+明基屏幕挂灯实现超智能家居物联网小程序

一、需求背景 在尝试了这么多次的ChatGPT在纯软方向的应用开发后,深感LLM(大语言模型)的能力之强大。俗话说得好:心有多大舞台就有多大!基于AI大模型,可以尝试的方面实在是数不胜数!轻轻松松就可以突破在移动互联网时…

探究垃圾回收算法及代码示例【AI辅助】

简介: 垃圾回收是现代编程语言中的一个重要概念,它负责自动管理内存的分配和释放,以减轻程序员的负担。本文将深入探究垃圾回收算法的原理和实现,并提供相关的代码示例,帮助读者更好地理解和应用垃圾回收技术。 什么是…

「第 1 章」原来我们真的很菜!

第 1 章 原来我们真的很菜! 1.1 新人背景 大家好,我是“测试划水老师傅”。基于业务的增长和人力需求,但资金有限,领导给了1个“初级测试工程师”的招聘指标。好吧,创业公司就这样,紧着我一个有经验的人,使劲薅。经过为期2个礼拜的面试以及沟通,入职人员信息如下:张三…

配置华为防火墙为三层核心交换机SVI

Web配置防火墙三层核心交换机SVI: 配置防火墙接口: 配置防火墙安全区域: 划分VLAN:

华为USG6000防火墙配置合集

文章目录 防火墙安全策略实验实验拓扑图实验目的:实验配置:测试: 防火墙NAT Server & 源NAT实验源NAT实验实验拓扑端口地址和区域划分1.配置安全区域2.配置安全策略3.配置NAT地址池4.配置NAT策略测试: NAT Server2.配置安全策…

华为FusionCloud云计算vCPU资源计算公式(MHz)

vCPU 资源 物理CPU个数 * 物理CPU核数 * 单核线程数 * CPU频率 举例:1个CPU,双核,每核2个线程,3.0GHz,那么vCPU资源 1 * 2 * 2 * 3.0GHz 12GHz 12000MHz。 FusionCompute发放虚拟机流程中可对CPU资源进行限制&…

华为OD机试真题B卷 Java 实现【蛇形矩阵】,附详细解题思路

一、题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 例如,当输入5时,应该输出的三角形为: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 二、输入描述 输入正整数N(N不大于100)。 三、输出描述…