IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构(十一)——B树 -> 正文阅读

[数据结构与算法]数据结构(十一)——B树

重点

  1. B树的基本特点
  2. B树的建立、插入和删除操作
  3. B+树的基本概念

1. B树及其基本操作

1.1 概念

B树又称多路平衡查找树,B树中所有节点的孩子个数的最大值称为B树的阶m。
在这里插入图片描述
(1)性质
一棵m阶B树或为空树,或为满足一下特性的m叉树:

  • 对任一节点,其所有子树高度相同。
  • 根节点的子树数∈[2,m],关键字数∈[1,m-1]。其他节点的子树数∈[[m/2],m],关键字数∈[[m-2]-1,m-1]
  • 所有非叶节点的结构如下:
    在这里插入图片描述
    其关键字值满足子树0<关键字1<子树1<关键字2…。

(2)高度

  • 最小高度 h ≥ log ? m ( n + 1 ) h \geq \log_m(n+1) hlogm?(n+1)

让每个节点尽可能满,有m-1个关键字,m个分叉。即有 n ≤ ( m ? 1 ) ( 1 + m + m 2 + ? + m h ? 1 ) = m h ? 1 n \leq (m-1)(1+m+m^2+\cdots+m^{h-1})=m^h-1 n(m?1)(1+m+m2+?+mh?1)=mh?1,因此 h ≥ log ? m ( n + 1 ) h \geq \log_m(n+1) hlogm?(n+1)

  • 最大高度 h ≤ log ? [ m / 2 ] ( n + 1 2 ) + 1 h \leq \log_{[m/2]}(\frac{n+1}{2})+1 hlog[m/2]?(2n+1?)+1

在这里插入图片描述

1.2 基本操作

(1)B树的查找
B树上的每一个结点都是有多个关键字的有序表。

  • 在B树上找结点
  • 在结点内找关键字:现在有序表中查找,若没有找到则按照指针信息到子树中查找。查找到叶节点时,说明树中没有对应关键字,查找失败。

(2)B树的插入
核心要求:

  • 对于m阶B树,除根节点外,结点关键字个数[m/2]-1 ≤ \leq n ≤ \leq m-1。
  • 子树0<关键字1<子树1<关键字2…

思路

  • 定位新元素一定插入到最底层的“终端节点“,用查找确定插入位置。

  • 分裂:若原节点关键字数超过上限,则从中间位置[m/2]将其中的关键字分为两部分。左部分包含的关键字放在原节点中,右部分包含的关键字放在新结点中,中间位置插入原节点的父节点。若导致父节点的关键字个数也超过上限,则继续进行分裂操作,直到这个过程传到根节点为止。
    ①应该将中间位置插入到节点所属指针右边的位置。
    在这里插入图片描述
    在这里插入图片描述

(3)B树的删除

  • 非终端结点:若删除关键字在非终端节点,则用直接前驱或直接后继替代被删除的关键字,然后删除直接前驱或直接后继
    ①直接前驱:左侧指针子树中的最右下元素
    ②直接后继:右侧指针子树中的最左下元素
    ③对非终端结点的删除必然可以转化为对终端节点的删除操作。
    在这里插入图片描述
  • 终端结点:若删除关键字在终端节点,则直接删除关键字。(要注意节点关键字个数是否低于下限[m/2]-1)
  • 关键字个数低于下限:若被删除关键字所在结点删除后关键字个数低于下限,且与此结点右兄弟关键则个数还很宽裕,则需要调整该结点、右(左)兄弟结点及其双亲结点(父子换位法)。
    ①左兄弟宽裕时,用当前节点的前驱、前驱的前驱填补空缺。
    在这里插入图片描述
    在这里插入图片描述
    ②右兄弟宽裕时,用当前节点的后继、后继的后继填补空缺。
    在这里插入图片描述
    在这里插入图片描述
    若兄弟不够借时,将兄弟节点及在双亲节点中间的关键字合并。若父节点的关键字个数低于下限时,则继续合并操作直到根节点
    在这里插入图片描述
    在这里插入图片描述

2. B+树的基本概念

(1)定义与性质
一棵m阶的B+树需满足下列条件:

  • 每个分支结点最多有m棵子树。
  • 非叶根节点至少有两颗子树(绝对平衡),其他每个分支结点至少有[m/2]棵子树。
    在这里插入图片描述
  • 结点的子树个数与关键字个数相等
  • 所有分支结点仅包含各个子节点中关键字的最大值,不包含对应关键字的存储信息
  • 所有叶节点包含全部关键字及指向相应记录的指针,叶节点中将关键字按大小顺序排列,并且相邻叶节点按大小互相链接起来
    在这里插入图片描述

(2)B树与B+树的区别

  • B+树中n个关键字对应n棵子树,B+树中n个关键字对应n+1棵子树.

  • B+树中所有非叶节点仅起索引作用,而不包含关键字对应记录的存储地址。B树中包含关键字及其存储信息。

  • 非叶节点不含关键字对应记录的存储地址,使得磁盘块可以包含更多的关键字,使得B+树的阶更大,树高更矮,读磁盘次数更少,查找更快
    在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章           查看所有文章
加:2022-05-18 17:54:13  更:2022-05-18 17:57:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 7:09:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码