存储数据的树形结构

news2024/11/15 19:35:47

目录

1、二叉查找树

2、平衡二叉树AVL Tree

3 、平衡多叉树B-Tree

4、B+Tree树

5 、红黑树

红黑树的应用

6.平衡树的旋转


mysql 索引数据结构:

B+tree 索引是B+树在数据库中的一种实现,最为常见的。B+树 中的B代表平衡,而不是二叉

1、二叉查找树

二叉树的左子树的键值小于根的键值,右子树的键值大于根的键值。

二叉查找树可以任意构造,但是可能有些构造情况可能导致查找效率低。如果想让二叉树查询效率尽可能的高,需要二叉树是平衡的,所以有AVL平衡二叉树

2、平衡二叉树AVL Tree

合二叉树的条件,还满足任何节点两个子树的高度最大差为1.

AVL树进行插入或删除节点,可能导致AVL树失去平衡,会出现:左左,左右,右左、右右的情况,会导致失去平衡,就需要进行旋转。

3 、平衡多叉树B-Tree

B-Tree是为磁盘等待外存设备设计的一种平衡查找树。每个节点包含key和data.

系统从磁盘读取数据到内存时以磁盘块block为基本耽误的,位于同一个磁盘块中的数据会被一次性读取出来,不是需要什么取取什么。InnoDB存储引擎中有页Page,页也是磁盘管理的最小耽误。InnoDB存储引擎中默认每个页大小为16KB,通过innodb_page_size将页大小设置为4k\8k\16k.

InnoDB在把磁盘数据读入搭配磁盘时会以页为基本单位,查询时如果每一页中每条数据都能有助于定位数据记录的位置,将会减少IO次数,提高查询效率。

B-Tree是键值对进行记录,key各不相同。m阶的B-Tree特性为:

1)每个节点最多有m个孩子。

2)除了根节点和叶子节点外,其他每个节点至少有 (m+1)/2个孩子;

3)若根节点不是叶子节点,则至少有2个孩子;

4)所有叶子节点都在同一层,且不包含其他关键字的信息。

5)每个非中断节点包含n个关键字信息;

6)ki为关键字,且关键字升序排列

模拟查找关键字29的过程:

  1. 根据根节点找到磁盘块1,读入内存。【磁盘I/O操作第1次】
  1. 比较关键字29在区间(17,35),找到磁盘块1的指针P2。
  1. 根据P2指针找到磁盘块3,读入内存。【磁盘I/O操作第2次】
  1. 比较关键字29在区间(26,30),找到磁盘块3的指针P2。
  1. 根据P2指针找到磁盘块8,读入内存。【磁盘I/O操作第3次】
  1. 在磁盘块8中的关键字列表中找到关键字29。

分析上面过程,发现需要3次磁盘I/O操作,和3次内存查找操作。由于内存中的关键字是一个有序表结构,可以利用二分法查找提高效率。而3次磁盘I/O操作是影响整个B-Tree查找效率的决定因素。B-Tree相对于AVLTree缩减了节点个数,使每次磁盘I/O取到内存的数据都发挥了作用,从而提高了查询效率。

4、B+Tree树

在B-Tree基础上进行优化,使其更适合实现外存储索引结构。InnoDB就是存储引擎就是用B+Tree。

在B-Tree中每一个页存储空间有限,如果data数据较大,会导致每个节点key太小,当数据量很大同一会导致B_Tree深度较大,增大查询的磁盘IO次数,影响查询效率。

在B+Tree中,所有数据记录节点都是按照键值大小顺序存放在同一层叶子节点上,而非叶子节点上只存储key值信息,可以大大增大每个节点存储的key值的数量,降低B+Tree的高度

特点:

1)非叶子节点只存储键值信息;

2)所有叶子节点之间都有一个链指针;

3)数据记录都存放在叶子节点中;

B+Tree有两个头指针,一个指向根节点,一个指向关键字最小的叶子节点,而且所有叶子节点即数据节点之间是一个链式环。

B+Tree树,对B+Tree的查找运算:对于主键的范围查找和分页查找;从根节点开始,进行随机查找。

数据库中B+Tree索引可以为聚集索引和辅助索引。

上图为聚集索引,(主键)聚集索引的B+Tree的叶子节点存放的整张表的行记录数据。辅助索引和聚集索引的区别在于辅助索引的叶子节点并不包含行记录的全部数据,二十存储相应行数据的聚集索引,即主键。当通过辅助索引来查询数据时,InnoDB存储引擎会遍历辅助索引找到主键,然后再通过主键在聚集索引中找到完整的行记录数据。

无序的字符: mysql 可以使用ASSIC 进行比较大小;

5 、红黑树

R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。

红黑规则

  1. 节点不是黑色,就是红色(非黑即红)
  1. 根节点为黑色
  1. 叶节点为黑色(叶节点是指末梢的空节点 NilNull
  1. 一个节点为红色,则其两个子节点必须是黑色的(根到叶子的所有路径,不可能存在两个连续的红色节点)
  1. 每个节点到叶子节点的所有路径,都包含相同数目的黑色节点(相同的黑色高度)
红黑树的应用
  • Java中,TreeMap、TreeSet都使用红黑树作为底层数据结构
  • JDK 1.8开始,HashMap也引入了红黑树:当冲突的链表长度超过8时,自动转为红黑树
  • Linux底层的CFS进程调度算法中,vruntime使用红黑树进行存储。
  • 多路复用技术的Epoll,其核心结构是红黑树 + 双向链表 ;; redis io多路复用

红黑树的 查询性能略微逊色于AVL树,因为他比avl树会稍微不平衡最多一层,也就是说红黑树的查询性能只比相同内容的avl树最多多一次比较,但是,红黑树在插入和删除上完爆avl树, avl树每次插入删除会进行大量的平衡度计算,而红黑树为了维持红黑性质所做的红黑变换和旋转的开销,相较于avl树为了维持平衡的 开销要小得多;

红黑树的每个节点只能存放一个元素

6.平衡树的旋转

旋转的目的是为了保持树的平衡; 平衡的条件: 左右子树高度差不超过1;

  1. 左旋转
  • 在右子树添加节点造成不平衡。root只有右孩子的情况,以root的右孩子为中心,向左(逆时针)旋转root节点,旋转结果为root节点变为root右孩子的左孩子,如下图, 在右子树添加节点(图中的16),造成不平衡

  • 在右子树添加节点造成不平衡,其中root同时有左右子树,左子树只有一个节点,右孩子只有一个右子节点,添加一个节点(下图中的17)后造成不平衡树,此时可以看到,root的右子树不平衡,此时按照第一种旋转方式可以将右子树旋转平衡,进而使整棵树平衡,

  • 在右子树添加节点造成不平衡,其中root只有一个左孩子,root的右孩子同时存在左右孩子,

2.右旋转

  • 在左子树添加节点造成不平衡, root没有右孩子,同时左孩子只有左孩子一个节点, 此时以root的左孩子为中心,进行右旋转(顺时针旋转), 将root左孩子提升为root,root降为左孩子的右孩子,

  • 在左子树添加节点造成不平衡, root同时包含左右孩子,右孩子没有子节点,左孩子只有一个左孩子节点,此时root的左子树为不平衡树,按照上面的方式对左子树进行右旋转得到平衡树,

  • 在左子树添加节点造成不平衡, root只有一个右孩子, 左孩子同时有左右孩子, 在左孩子的左孩子下添加一个节点,

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

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

相关文章

火山引擎数智平台:高性能ChatBI的技术解读和落地实践

导读:大模型能力的发展和成熟,催生出新一代智能化 BI—— ChatBI,即通过自然语言处理(NLP)与大型语言模型(LLMs)的结合,极大简化数据分析过程,提高效率并降低分析门槛。火…

剪画:视频怎么去水印?分享几个简单实用的视频去水印方法!

亲爱的小伙伴们,在视频创作的道路上,水印问题是不是常常让你感到困扰呢? 别担心,今天就来为大家详细介绍七种超实用的视频去水印方法,让你的视频制作更加顺畅。 一、剪画 - 短视频去水印 剪画是一款非常强大的视频处理…

双向NAT=源NAT+NAT Server,有这么6?

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 你们好,我的网工朋友。 随着移动设备的普及和云计算技术的发展,网络流量的规模和复杂度不断增加。网络地址转换&#xff…

像JSON一样使用ProtoBuf,空间还能缩小60%,性能提升100%

首发公众号:【赵侠客】 引言 在前面《释放你九成的带宽和内存:GZIP在解决Redis大Key方面的应用》一文中我使用GZIP算法可以将JSON格式数据的大小缩小88%从而节省了大量的存储和带宽资源,本文介绍另一种JAVA对象序列化神器——ProtoBuf(Proto…

打破服务提供商的数据中心自动化障碍

在通信服务提供商(CSP)不断变革的背景下,数据中心发挥着越来越重要的作用。这些数据中心不仅是部署基于云的5G基础设施的重要组成部分,还在促进边缘计算和下一代企业解决方案的过程中发挥着关键作用。然而,随着数据中心…

YOLOv10改进系列,YOLOv10损失函数更换为Powerful-IoU(2024年最新IOU),助力高效涨点

改进前训练结果: 改进后的结果: 摘要 边界框回归(BBR)是目标检测中的核心任务之一,BBR损失函数显著影响其性能。然而,观察到现有基于IoU的损失函数存在不合理的惩罚因子,导致回归过程中锚框扩展,并显著减缓收敛速度。为了解决这个问题,深入分析了锚框扩展的原因。针…

PyCharm安装和使用教程(Windows系统)

一、pycharm基本使用 说明: PyCharm 是一款功能强大的 Python 编辑器, 本文简单的介绍下PyCharm 在 Windows下是如何安装的。 PyCharm 的下载地址:http://www.jetbrains.com/pycharm/download/#sectionwindows 如果进入网页时间过长或进不…

OpenAI震撼发布o1大模型!RL深度思考,技术差距拉开

openai放大招了,是奥特曼在推上宣传了很久的草莓真身,这次它真的来了。 又给大家带来一点小小的震撼,国内大模型老板们也不再迷茫了,4o的多模态的还没赶上呢,这下怎么又回到纯文本了,不是说大家都搞得差不多…

神经网络通俗理解学习笔记(1)

神经网络通俗理解学习笔记(1) 神经网络原理激活函数前向传播和反向传播多层感知机代码实现加载数据网络结构损失函数优化器训练测试保存 回归问题一元线性回归多元线性回归多项式回归 线性回归代码实现数据生成设置超参数初始化参数可视化Pytorch模型实现…

性能测试的五大目标

性能测试的目的其实是为了验证软件系统是否能够达到用户的性能指标,发现软件系统中存在的性能瓶颈,随后优化软件,最后起到优化系统的目的。 主要有以下几点: 评估系统的能力 测试中得到的负荷和响应时间数据可以被用于验证所计…

AI+智能监控实训平台

基本介绍 中智讯“AI智能监控实训平台” (AI-Monitor)是中智讯公司面向于人工智能等相关专业设计的一款工程实训平台,该产品基于基于行业内主流的TensorFlow深度学习框架来实现,同时,通过机器视觉技术和边缘计算技术实…

【新手上路】衡石分析平台使用手册-系统管理员手册

用户管理​ 用户管理页面可以创建管理用户、对用户进行分组管理、组织架构管理及用户属性的维护和管理。下面详细介绍用户管理相关功能。 用户管理​ 用户管理子页面展示了当前系统中所有用户的信息,可以添加新用户,查看、编辑已有用户,可…

C++设计模式(更新中)

文章目录 1、创建型模式1.1 简单工厂(Simple Factory)(1)示例(2)总结 1.2 工厂方法(Factory Method)(1)示例(2)总结 1.3 抽象工厂&…

【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧

文章目录 Python NumPy学习指南第一部分:NumPy简介与安装1. 什么是NumPy?2. 安装NumPy使用pip安装:使用Anaconda安装: 第二部分:NumPy数组基础1. NumPy数组的创建从列表创建一维数组:创建多维数组&#xff…

发现了一个很神奇很哇塞的做事心态,就2个字

最近发现了一个很神奇很哇塞的做事心态,轻松收获了很多意向不到的结果,其实就两个字,会玩。 大家有没有发现,很多时候越是重要的地方,我们就会越用力,越用力的时候,反而结果却差强人意。越在意我…

IDC 2024未来企业大奖:酷克数据携手中国联通打造湖仓一体平台

9月11日-12日,2024 IDC中国年度峰会暨颁奖典礼于上海圆满召开。全球权威IT市场研究和咨询公司IDC公布了 2024 未来企业大奖的优秀奖名单。中国联通与酷克数据联合申报的《中国联通筑梦数字化转型:自主可控、开放协作的混合受管理湖仓一体平台》项目&…

Hi3516DV500 高清智慧视觉 SoC

1.1 概述 Hi3516DV500 是一颗面向视觉行业推出的高清智能 Soc 。该芯片最高支持 2 路 sensor 输入,支持最高 5M30fps 的 ISP 图像处理能力,支持 2F WDR 、多级降噪、六轴防 抖、多光谱融合等多种传统图像增强和处理算法,支持通…

企语iFair-协同管理系统-任意文件读取

文章目录 免责申明漏洞描述搜索语法漏洞复现yaml修复建议 免责申明 本文章仅供学习与交流,请勿用于非法用途,均由使用者本人负责,文章作者不为此承担任何责任 漏洞描述 企语iFair协同管理系统getuploadimage.jsp接口处存在任意文件读取漏洞…

发现抖音趋势与打造病毒内容的17种方法

无论是喜欢还是不喜欢,社交媒体总是关于什么是“流行”和受欢迎的。因此,毫不奇怪,随着TikTok的发展,TikTok的趋势也在不断增加。 TikTok趋势是指TikTok视频中具有吸引大量观众的特征。TikTok趋势通常始于一些通过尝试创意格式或…