当前位置: 首页 > news >正文

b树,b+树,红黑树

一、B树

视频

1.特点

平衡,有序,多路
在这里插入图片描述

2. 查找

访问节点在硬盘上进行,节点内查找在内存上进行,树高就是读取硬盘的次数。
每个节点里的数据是有序的(查找时可以顺序查找或者二分查找)
在这里插入图片描述

3. 插入

先查找到插入的位置进行插入,如果没有上溢出,无需调整
如果有,则否则中间元素⌈m2⌉\left\lceil \frac{m}{2} \right\rceil2m上移,左右两边分裂
(直到没有上溢出为止)

  • 插入,无上溢出:
    例子插入20:

原来的树
在这里插入图片描述

  • 有上溢出则中间节点上移到父亲节点,两边节点往两边分裂:
    例子插入53:
    在这里插入图片描述
    在这里插入图片描述

4. 构建

1,5,7,4,16,35,24,42,21,17 ,18构造的B树如下:
在这里插入图片描述

5. 删除

删除时可能出现下溢出,即节点内数据少于最小个数⌈m2⌉−1\left\lceil \frac{m}{2} \right\rceil-12m1

  • 删除非叶子节点
    例子:删除45
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 叶子节点:直接删除

  • 删除非叶子节点出现下溢出
    例子:删除68后下溢出,则看兄弟是否够够借在这里插入图片描述
    假如借左兄弟的,则父下来,兄上去在这里插入图片描述

  • 如果删除后,兄弟不够借的情况:
    例子:删除86,只剩下83了,左右两边不够借
    在这里插入图片描述

合并,父下移左,然后右并过来,结果如下:
在这里插入图片描述

二、B+树

视频

1.特点:

  1. m个分支m个元素
  2. 非叶子节点对应孩子节点的对大值,存储的都是叶子节点的关键字,相当于是索引的索引,所以是多级索引结构
    在这里插入图片描述

2. B+树的叶子节点:

  • 叶子包含了所有元素

  • 叶子从小到大排列,节点之间通过指针链接成链表结构,可以通过头指针快速对节点顺序遍历,不用像B树那样通过中序顺序遍历

  • B+树常用作数据库的索引

    • InnoDB 引擎(聚簇索引 为主):叶子节点存储的是直接存储整行数据,即该索引键对应的完整记录。二级索引(如普通索引、唯一索引)的叶子节点:不存整行数据,只存储对应的主键值,查询时需通过主键值回表(到聚簇索引)获取完整数据。
    • MyISAM 引擎(非聚簇索引
      无论主键索引还是二级索引,叶子节点都不存整行数据,只存储数据在物理文件中的地址(偏移量) ,查询时需通过地址去数据文件中读取完整记录

叶子内的元素叫作关键字
数据库中的某个记录(就是表中的每一行)。
b+树和数据库表都存在硬盘

在这里插入图片描述

3. 解释MyISAM中的索引(非聚簇索引)

MyISAM 引擎的索引与 InnoDB 有本质区别:数据和索引完全分离存储 (数据存在.MYD文件,索引存在.MYI文件),且无论主键索引还是二级索引,叶子节点都只存储数据在物理文件中的地址(偏移量),而非完整数据或主键值。
特点:

  • 所有索引(主键索引、二级索引)都是 “非聚簇索引”,索引与数据分开存储;
  • 索引的叶子节点不存数据本身,只存数据记录在.MYD文件中的物理地址(类似指针,指向数据的具体位置);
  • 主键索引和二级索引的结构逻辑一致,区别仅在于 “索引关键字” 不同(主键字段 vs 二级索引字段)。
    如下图:
    在这里插入图片描述
    举例子解释:
    在这里插入图片描述
    在这里插入图片描述
    二级索引与主键索引的查找逻辑一摸一样,只是存储的是二级索引的关键字和地址
    在这里插入图片描述

4. 解释InnoDB中的索引(MySQL):

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. MyISAM和InnoDB的索引区别

在这里插入图片描述

6. 查找

B+树的查找最终都落在叶子节点上,因为只有叶子节点存储的才是记录。

  1. 顺序查找:直接顺序遍历叶子的链表
  2. 随机查找:通过root指针逐层对比大小向下查找,对比过程是先和节点内的第一个比较(最小值),比它大则在节点内继续比较,比它小则往下面的左子树比较,log级别的复杂度
  3. 范围查找
    比如查找1-0~50,先找最小值10,发现不存在,最小值就是14,然后从14开始顺序遍历链表,直到找到45在这里插入图片描述

三、B树和B+树的对比

在这里插入图片描述

四、红黑树

视频
红黑树是一个二叉搜索树,它和AVL树一样,都是对二叉搜索树进行了平衡,只是平衡的策略不同。

1. 特点

在这里插入图片描述
在这里插入图片描述

2. 插入

在这里插入图片描述
插入规则:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/70d7594c91744b91a87c72d64dc2a09b.png

例子:插入节点叔叔是红色
在这里插入图片描述

插入后:
在这里插入图片描述

例子2:插入节点叔叔是黑色
插入前:
在这里插入图片描述

插入后:
在这里插入图片描述

构建例子:
注意:插入顺序不同,构造的红黑树通常不一样
在这里插入图片描述

3. 与AVL树对比

**查询:**时间复杂度都是O(logN),红黑树小于AVL树(因为AVL树高度差不超过1,红黑树不超过两倍,即AVL树平衡要求更严格,所以红黑树查询效率更慢)
插入删除:红黑树更好(因为AVL平衡性更严格,所以旋转次数更多)

在这里插入图片描述

红黑树和AVL树都是自平衡二叉搜索树(即满足“左子树值≤根节点值≤右子树值”的特性,同时通过旋转维持平衡),但两者的平衡策略和适用场景有显著差异。以下先明确红黑树的核心特性,再从多个维度对比两者的区别。

对比维度红黑树AVL树
平衡策略通过“颜色规则+黑高一致”维持近似平衡(最长路径≤最短路径×2)通过“平衡因子”维持严格平衡(左右子树高度差≤1)
旋转操作频率插入最多需2次旋转,删除最多需3次旋转(旋转少)插入/删除可能需要多次旋转(因需严格维持高度差)
空间开销只需存储一个“颜色”标记(额外空间少)需要存储“平衡因子”或“高度”(额外空间更多)
查找效率略低(树高略大,最坏O(log n),但常数因子小)更高(树高更矮,严格平衡,最坏O(log n))
插入/删除效率更高(旋转少,维护成本低)更低(旋转频繁,维护成本高)
适用场景插入/删除频繁的场景,如Java中HashMap,TreeMap,TreeSet查询操作远多于插入/删除的场景(如静态数据索引)
http://www.dtcms.com/a/469781.html

相关文章:

  • win7 iis网站无法显示上海网站设计公司有哪些
  • 马来西亚代表团到访愿景娱乐 共探TikTok直播电商增长新路径
  • 唯识主义:哲学爱智慧本质的当代回归
  • 网站开发公司照片网站建设开发协议
  • 小网站模板网页传奇推荐
  • 支持400+格式!FileOptimizer文件一键压缩
  • 【Unity笔记】Unity Lighting Settings 全解析:一文读懂烘焙光照的每个参数(VR项目Lighting优化)
  • 全链路智能运维中的业务负载预测与弹性伸缩机制
  • 健康管理实训室建设方案:标准化构建与质量保障
  • 甘肃建设局网站wordpress获取文章来源
  • 超简洁网站网络软文营销
  • XXE 注入漏洞全解析:从原理到实战
  • edu div2 183个人笔记(目前只补到D,后续可能会更新)
  • MDK启动文件堆栈空间手动指定地址方法和验证
  • Leetcode每日一练--27
  • GNSS与单北斗变形监测一体机在基础设施安全中的应用分析
  • 西安网站建设公司排国外网站后台模板
  • 郑州网站顾问热狗网python的网站开发
  • Linux进程第十一讲——进程优先级的本质与Linux实现
  • Java Redis “持久化”面试清单(含超通俗生活案例与深度理解)
  • Linux一切皆文件的意义
  • 网站怎样建立数据库连接做网站公司职员工资
  • 【javascript】js使用技巧笔记
  • 复现嘉立创小项目之直流稳压电源
  • Kubernetes 之海,Go 之舟:避开那些吞噬性能的隐形暗礁
  • 基于独立成分分析(ICA)的图像分离技术实现
  • 网站建站如何做seo有免费的网站服务器吗
  • 使用LangChain创建智能Agent完整指南
  • 江苏省网站备案电话怎样做网站开发
  • Qt:窗口与文件绑定