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

【数据结构】AVL平衡二叉树底层原理以及二叉树的演进之多叉树

1.AVL平衡二叉树底层原理

  • 背景

    • 二叉查找树左右子树极度不平衡,退化成为链表时候,相当于全表扫描,时间复杂度就变为了O(n)

    • 插入速度没影响,但是查询速度变慢,比单链表都慢,每次都要判断左右子树是否为空

    • 需要保证二叉查找树一直保持平衡,就需要用到平衡二叉树

在这里插入图片描述

  • 平衡二叉树

    • 称为AVL树(Adelson-Velskii和Landis)平衡二叉查找树是一种特殊的二叉查找树每个节点的左右子树的高度差不能超过1。
    • 平衡二叉树保证了树的构造是平衡的,当插入或删除数据导致不满足平衡二叉树不平衡时,会进行调整树上的节点来保持平衡。
    • 平衡二叉树的插入和删除操作都是O(logn)的,因此它的查找性能很高,比非平衡的二叉查找树要快得多。

    • 实现方式:红黑树、 Treap、伸展树等。

  • 核心思想

    • 在插入或删除节点时,如果发现子树不平衡,则对子树进行旋转操作,使其重新达到平衡

    • 旋转操作有三种,哪边高度底就哪边旋转, 提升高度

      • 左旋LL旋转
      • 右旋RR旋转
      • 左右LR双旋 和 右左RL双旋
  • 图解过程

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

  • 问题点

    • 查找操作

      • 二叉搜索树的时间复杂度介于O(log2N)到O(n)之间
      • 如果退化成单链表,时间复杂度就是顺序查找,为O(n)
      • 如果是平衡二叉树,查找效率会提高到O(log2N)
    • 例子

      • 平衡二叉树的高度就等于每次查询数据时磁盘 IO 操作的次数。
      • 假如磁盘每次寻道时间为10ms,在表数据量大时,查询性能就会很差
      • 1百万的数据量,log2(N)约等于20次磁盘IO,时间20*10=0.2s
        • log2(N) 相当于2的多少次方(立方)等于N,例:log2 (8)= 3
        • 2的20次方=1048576,所以就是20次磁盘IO
    • 不支持范围查询快速查找,范围查询时需要从根节点多次遍历,查询效率比较低

2.二叉树的演进之多叉树

  • 背景

    • 平衡二叉树操作效率高,但是存在不少问题,常规需要把树加载到内存里面

    • 如果节点少则没问题,但是如果节点多 则高度很大,进行IO操作则存在性能问题

    • 场景

      • 平衡二叉树每个节点只存储一个键值和数据的,每个磁盘块仅仅存储一个键值和数据
      • 如果要存储海量的数据,那构建平衡二叉树的时候耗时多
      • 如果平衡二叉树的节点将会非常多,高度也会极其高,查找数据时会进行很多次磁盘 IO,效率将会极低
    • 为了解决平衡二叉树的这个问题,设计一种单个节点可以存储多个键值和数据的平衡树,也就是我们接下来要说的 多叉树

  • 多叉树

    • 也叫 多路查找树(muitl-way search tree

    • 每一个节点的子树可以多于两个,且每一个节点处可以存储多个元素,常见的就是B树、B+树等

      • 注意:B是Balanced意思,不是Binary的意思
    • 多叉树通过重新组织节点,降低了树的高度,可以提高IO效率

在这里插入图片描述

  • 应用

    • 操作系统IO操作都会利用磁盘预读原理,如果一个节点大小是一个存储页(4KB)

    • 存储每个节点只需要一次IO即可完成存储

    • B树在存储系统里面广泛应用,比如数据库系统、文件系统等
      都会利用磁盘预读原理,如果一个节点大小是一个存储页(4KB)

    • 存储每个节点只需要一次IO即可完成存储

    • B树在存储系统里面广泛应用,比如数据库系统、文件系统等

    • 具体多叉树的应用及原理B-Tree和B+Tree的底层逻辑会在 MySQL底层存储B-Tree和B+Tree原理分析 中解释说明

相关文章:

【数据结构】AVL平衡二叉树底层原理以及二叉树的演进之多叉树

1.AVL平衡二叉树底层原理 背景 二叉查找树左右子树极度不平衡,退化成为链表时候,相当于全表扫描,时间复杂度就变为了O(n) 插入速度没影响,但是查询速度变慢,比单链表都慢,每次都要判断左右子树是否为空 需…...

K8S篇-安装nfs插件

前言 有关k8s的搭建可以参考:http://t.csdn.cn/H84Zu 有关过程中使用到的nfs相关的nas,可以参考: http://t.csdn.cn/ACfoT http://t.csdn.cn/tPotK http://t.csdn.cn/JIn27 安装nfs存储插件 NFS-Subdir-External-Provisioner是一个自动配置…...

xmu 离散数学 卢杨班作业详解【4-7章】

文章目录第四章 二元关系和函数4.6.2911121618.120.222.1232834第五章 代数系统的一般概念2判断二元运算是否封闭348111214第六章 几个典型的代数系统1.5.6.7.11.12151618第七章 图的基本概念12479111215第四章 二元关系和函数 4. A{1,2,3} 恒等关系 IA{<1,1>,<2,2…...

多重背包问题中的二进制状态压缩

1.多重背包问题 经典的多重背包问题和01背包问题的相似之处在于二者的一维遍历顺序都是从右侧往左侧遍历。 同时多重背包的一维写法不比二维写法降低时间复杂度。 2.多重背包标准写法:(平铺展开形式&#xff09; class Solution {public int maxValue(int N, int C, int[] s…...

汇编语言程序设计(四)之汇编指令

系列文章 汇编语言程序设计&#xff08;一&#xff09; 汇编语言程序设计&#xff08;二&#xff09;之寄存器 汇编语言程序设计&#xff08;三&#xff09;之汇编程序 汇编指令 1. 数据传输指令 指令包括&#xff1a;MOV、XCHG、XLAT、LEA、LDS、LES、PUSH、POP、PUSHF、LA…...

Vant2 源码分析之 vant-sticky

前言 原打算借鉴 vant-sticky 源码&#xff0c;实现业务需求的某个功能&#xff0c;第一眼看以为看懂了&#xff0c;拿来用的时候&#xff0c;才发现一知半解。看第二遍时&#xff0c;对不起&#xff0c;是我肤浅了。这里侧重分析实现原理&#xff0c;其他部分不拓展开来&…...

【自然语言处理】【大模型】大语言模型BLOOM推理工具测试

相关博客 【自然语言处理】【大模型】大语言模型BLOOM推理工具测试 【自然语言处理】【大模型】GLM-130B&#xff1a;一个开源双语预训练语言模型 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍 【自然语言处理】【大模型】BLOOM&#xff1a;一个176B参数…...

云桌面技术初识:VDI,IDV,VOI,RDS

VDI&#xff08;Virtual Desktop Infrastucture&#xff0c;虚拟桌面架构&#xff09;&#xff0c;俗称虚拟云桌面 VDI构架采用的“集中存储、集中运算”构架&#xff0c;所有的桌面以虚拟机的方式运行在服务器硬件虚拟化层上&#xff0c;桌面以图像传输的方式发送到客户端。 …...

基于本地centos构建gdal2.4.4镜像

1.前言 基于基础镜像构建gdal环境一般特别大&#xff0c;一般少则1.6G&#xff0c;多则2G甚至更大&#xff0c;这对于镜像的迁移造成了极大的不便。究其原因在于容器中有大量的源码文件以及编译中间过程文件&#xff0c;还要大量编译需要的yum库。本文主要通过在centos系统上先…...

生产环境线程问题排查

线程状态的解读RUNNABLE线程处于运行状态&#xff0c;不一定消耗CPU。例如&#xff0c;线程从网络读取数据&#xff0c;大多数时间是挂起的&#xff0c;只有数据到达时才会重新唤起进入执行状态。只有Java代码显式调用sleep或wait方法时&#xff0c;虚拟机才可以精准获取到线程…...

Day908.joinsnljdist和group问题和备库自增主键问题 -MySQL实战

join&snlj&dist和group问题和备库自增主键问题 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于join&snlj&dist和group问题和备库自增主键问题的内容。 一、join 的写法 join 语句怎么优化&#xff1f;中&#xff0c;在介绍 join 执行顺序的时候&am…...

算法 - 剑指Offer 丑数

题目 我们把只包含质因子 2、3 和 5 的数称作丑数&#xff08;Ugly Number&#xff09;。求按从小到大的顺序的第 n 个丑数。 解题思路 这题我使用最简单方法去做&#xff0c; 首先我们可以获取所有2n,3n,5*n的丑数&#xff0c;只是我们这里暂时无法排序&#xff0c;并且可能…...

【ONE·C || 文件操作】

总言 C语言&#xff1a;文件操作。    文章目录总言1、文件是什么&#xff1f;为什么需要文件&#xff1f;1.1、为什么需要文件&#xff1f;1.2、文件是什么&#xff1f;2、文件的打开与关闭2.1、文件指针2.2、文件打开和关闭&#xff1a;fopen、fclose2.3、文件使用方式3、文…...

cmd窗口中java命令报错。错误:找不到或无法加载主类 java的jdk安装过程中踩过的坑

错误: 找不到或无法加载主类 HelloWorld 遇到这个问题时&#xff0c;我尝试过网上其他人的做法。有试过添加classpath&#xff0c;也有试过删除classpath。但是依然报错&#xff0c;这里javac可以编译通过&#xff0c;说明代码应该是没有问题的。只是在运行是出现了错误。我安装…...

Breathwork(呼吸练习)

查了下呼吸练习相关内容&#xff0c;做个记录。我又在油管学习啦。 喜欢在you. tube看一些self-help相关的内容。比如学习方法、拉伸、跑步、力量举、自重锻炼等等。 总是听Obi Vicent说起Breathwork&#xff0c;比如&#xff1a; My 6am Morning Routine | New Healthy Habit…...

taobao.itemprops.get( 获取标准商品类目属性 )

&#xffe5;开放平台基础API不需用户授权 通过设置必要的参数&#xff0c;来获取商品后台标准类目属性&#xff0c;以及这些属性里面详细的属性值prop_values。 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请求参数 点…...

QT配置安卓环境(保姆级教程)

目录 下载环境资源 JDK1.8 NDK SDK ​安装QT 配置环境 下载环境资源 JDK1.8 介绍JDK是Java开发的核心工具&#xff0c;为Java开发者提供了一套完整的开发环境&#xff0c;包括开发工具、类库和API等&#xff0c;使得开发者可以高效地编写、测试和运行Java应用程序。 下载…...

【uni-app教程】八、UniAPP Vuex 状态管理

八、UniAPP Vuex 状态管理 概念 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 应用场景 Vue多个组件之间需要共享数据或状态。 关键规则 State&#xff1a…...

同花顺测试面经(30min)

大概三十分钟&#xff0c;面试官人还挺好的 1.自我介绍 2.详细问你了自我介绍中的一个实习经历 3.对我们公司有什么了解 &#xff01;&#xff01;&#xff08;高频&#xff09; 4.对测试有什么看法&#xff0c;为什么选测试 5.黑盒白盒分别是什么 6.对测试左移有什么看法…...

C++-简述#ifdef、#else、#endif和#ifndef的作用

回答如下&#xff1a; #ifdef&#xff0c;#else&#xff0c;#endif和#ifndef都是预处理指令&#xff0c;用于条件编译。#ifdef&#xff1a;这个指令用来判断一个宏是否已经被定义过&#xff0c;如果已经定义过&#xff0c;则执行后面的代码块。#else&#xff1a;这个指令一般与…...

连国家药监局都重磅发文!AI + 药品监管落地方向,学AI刻不容缓!

4 月 2 日&#xff0c;国家药监局正式发布《关于 “人工智能 药品监管” 的实施意见》&#xff0c;明确要把 AI 技术深度融入药品全生命周期监管&#xff0c;给行业带来新一轮数智化升级信号。作为关注医药行业的学长&#xff0c;今天用清晰易懂的方式&#xff0c;把这份文件的…...

golang.org/x/net WebSocket开发完全手册:实现实时双向通信

golang.org/x/net WebSocket开发完全手册&#xff1a;实现实时双向通信 【免费下载链接】net [mirror] Go supplementary network libraries 项目地址: https://gitcode.com/gh_mirrors/ne/net 在现代Web应用开发中&#xff0c;实时双向通信已成为提升用户体验的关键技术…...

2026 年4月深圳高精度 TOF 传感器,这些推荐值得关注!

随着科技的飞速发展&#xff0c;高精度TOF&#xff08;Time of Flight&#xff09;传感器在众多领域的应用越来越广泛。从智能家居到自动驾驶&#xff0c;从工业自动化到医疗成像&#xff0c;TOF传感器的市场需求呈现出爆发式增长。今天&#xff0c;我们就来聊聊2026年值得关注…...

94吨黄金“上链搬家”,手续费仅0.0016%!黄金RWA正在改写跨境资产流动

传统金融数百万美元的物流成本vs区块链毫厘之间的链上费用&#xff0c;资产数字化的未来已来。近日&#xff0c;Tether首席执行官Paolo Ardoino在X平台发文称&#xff1a;过去6个月内&#xff0c;共有价值约94吨黄金的代币化黄金XAUT在链上完成转移&#xff0c;合计手续费仅约0…...

基于Matlab的自适应信号滤波降噪:心音信号处理之旅

基于matlab的自适应信号滤波降噪&#xff0c;利用自适应滤波器对心音信号进行降噪&#xff0c;包括了LMS算法&#xff0c;归一化LMS&#xff0c;变步长LMS和RLS算法&#xff0c;其中RLS的降噪效果最好 程序已调通&#xff0c;替换自己的数据可以直接运行在信号处理的领域中&…...

【已解决】conda环境报错:Error while loading conda entry point: conda-libmamba-solver

打算配环境装 Signac&#xff0c;跑基因活性矩阵来着&#xff0c;图省事让 Gemini 给我生成 conda 配环境的命令。它建议我用 mamba&#xff0c;我想也没想&#xff0c;直接复制它的命令在终端开始安装。 结果装好后&#xff0c;base 环境也出问题了&#xff0c;所有环境都出问…...

空间多组学解决方案发展提速:未来六年CAGR锁定15.3%,行业增长预期持续向好

在生命科学领域&#xff0c;精准医学和个性化治疗的需求日益增长&#xff0c;对生物组织和细胞在空间维度上的深入理解成为关键。空间多组学解决方案作为这一需求的核心支撑技术&#xff0c;正受到全球科研和产业界的广泛关注。据恒州诚思调研统计&#xff0c;2025年全球空间多…...

深入SimpleFOC源码:为什么校准编码器时要将磁场固定在270度?一个硬件角度的解读

深入SimpleFOC源码&#xff1a;为什么校准编码器时要将磁场固定在270度&#xff1f;一个硬件角度的解读 当你第一次接触SimpleFOC库的编码器校准代码时&#xff0c;可能会对其中将电角度锁定在270度&#xff08;_3PI_2&#xff09;的操作感到困惑。这个看似随意的"魔法数字…...

Halcon轮廓拟合与排序:从基础算子到工业检测实战

1. Halcon轮廓处理技术概览 在工业视觉检测领域&#xff0c;轮廓处理技术扮演着至关重要的角色。想象一下&#xff0c;你站在一条自动化产线旁&#xff0c;传送带上快速移动着各种形状的金属零件。这些零件可能摆放得杂乱无章&#xff0c;表面可能有划痕或油污&#xff0c;但生…...

XXL-SSO开源项目未来展望:技术趋势与roadmap解读

XXL-SSO开源项目未来展望&#xff1a;技术趋势与roadmap解读 XXL-SSO作为一款分布式单点登录框架&#xff0c;已在众多企业中得到广泛应用&#xff0c;为多系统统一认证提供了轻量级且高扩展性的解决方案。随着分布式系统架构的不断演进&#xff0c;XXL-SSO正面临新的技术挑战…...