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

红黑树、B树、B+树


文章目录

  • 前言
  • 一、抛砖
  • 二、引玉


前言

通过问答的方式来了解一下树的演变。


一、抛砖

问:mysql 存储索引用的什么数据结构
答:B+树问:B+树的查询复杂度是多少?
答:和树的高度有关,一般是O(logₘN),M为树的阶数,即每个节点包含的子节点数问:hash的查询复杂度呢?
答:O(1)问:那为什么不用hash,而用B+树呢
答:请看。。。

二、引玉

问:关于树都有哪些知识点呢?
答:前中后序遍历、二叉树、平衡二叉树、B树、B+树、红黑树等等。问:二叉树的排序特点知道吗
答:左节点比根节点小,右节点比根节点大;且左右子树都是二叉排序树。问:但是极端情况下,会退化成链表(比如节点是倒序插入)
答:了解,所以要用平衡树,插入时调整这棵树,尽可能的保持节点均匀分布。问:没错,红黑树其实也是平衡树的一种,它的各种复杂规则都是为了保持平衡。但是为什么保持平衡呢?
答:因为树的查询性能取决于树的高度,保持平衡是为了降低树的高度。问:没错,Java中用一个数据结构就是采用的红黑树,你知道吗
答:TreeSetTreeMap、以及HashMap(数组长度大于64且链表长度大于8)问:B树了解多少呢?
答:1、多路平衡查找树,所有叶子节点位于同一层(深度相同),且通过插入、删除时的 “分裂”“合并” 操作维持平衡性,确保查询效率稳定在 O (logₘn)(m 为阶数)。2、每个节点可以包含多个关键字和多个子节点,且子节点数受阶数(m)限制问:那为什么要设计成多路呢?
答:是为了降低树的高度,提高查询效率问:那是否可以设计成无限路?
答:可以吧,但是会退化成有序数组问:会有问题,你想一下B树的使用场景呢?
答:一般用在稳健系统的索引上。问:那么为什么文件系统不用有序数组或者红黑树呢?
答:文件系统和数据库索引都是在硬盘上的,如果数据量大的话不一定能一次性加载到内存中。问:没毛病,那一棵树无法完全加载的话,你该怎么查找呢
答:可以一个节点一个节点的查找,层级递进,这时候多路的好处就体现出来了。问:没错,如果在内存中,红黑树比B树效率更好,但是涉及到磁盘,B树就更好了。下面你能讲讲B+树吗?
答:B+树在B树的基础上做了改造,数据都存在叶子结点,且叶子结点之间用指针链接成链表。问:那为什么要这么设计呢?
1、这种设计让非叶子节点可以容纳更多关键字(因为不需要预留空间存储数据),从而降低树的高度,减少 IO 次数,提升查询效率
2、当数据更新时,只需修改叶子节点,无需同步非叶子节点,减少了一致性维护的成本
3、叶子节点用指针链接成链表:高效支持范围查询
4、适配外存的 “块读取” 特性,外存的IO操作以 “块” 为单位(如4KB/块),一次 IO 可读取整个叶子节点的数据。

http://www.lryc.cn/news/590036.html

相关文章:

  • 计算机网络:(九)网络层(下)超详细讲解互联网的路由选择协议、IPV6与IP多播
  • 汽车数字化——65页大型汽车集团企业IT信息化(管理架构、应用架构、技术架构)战略规划【附全文阅读】
  • 怎么用快鲸aiseo提升百度搜索排名?
  • 如何区分Bug是前端问题还是后端问题?
  • Linux 驱动中 Timer / Tasklet / Workqueue 的作用与对比
  • [特殊字符] CentOS 7 离线安装 MySQL 5.7 实验
  • 【Linux】基本指令详解(二) 输入\输出重定向、一切皆文件、认识管道、man、cp、mv、echo、cat
  • VirtualBox 中 CentOS 7 双网卡配置静态 IP
  • C++ - 仿 RabbitMQ 实现消息队列--sqlite与gtest快速上手
  • Spring Boot 项目中数据同步之binlog和MQ
  • C++修炼:IO流
  • 有哪些好用的原型设计软件?墨刀、Axure等测评对比
  • AI产品经理面试宝典第25天:AI+机器人产品设计与技术落地面试题与答法
  • 使用 bat 批量创建带有项目前缀名的文件夹结构
  • 人工智能与机器人研究|深孔内表面缺陷特征内窥测量方法研究
  • Netty介绍和基本代码演示
  • 清理C盘方法
  • PyTorch中张量(TensorFlow)操作方法和属性汇总详解和代码示例
  • Postman接口
  • 【开源.NET】一个 .NET 开源美观、灵活易用、功能强大的图表库
  • GraphQL与REST在微服务接口设计中的对比分析与实践
  • Nacos 开源 MCP Router,加速 MCP 私有化部署
  • Linux开发利器:探秘开源,构建高效——基础开发工具指南(上)【包管理器/Vim】
  • 【Fastapi】Token验证与Postman模拟测试
  • HTTP REST API、WebSocket、 gRPC 和 GraphQL 应用场景和底层实现
  • IPv6
  • JavaScript进阶篇——第六章 内置构造函数与内置方法
  • qt 中英文翻译 如何配置和使用
  • AR智能巡检:电力行业数字化转型的“加速器”
  • 二分查找法