树---索引的进化--从二叉搜索树到B+Tree的光荣进化(未完)

news2024/11/27 16:15:25

平衡二叉树

1.  索引平衡二叉树(AVL树)是一种自平衡的二叉搜索树,它通过在插入和删除节点时自动调整树的结构,保持树的平衡,从而保证了树的高度始终保持在O(log n)的范围内,这对于提高搜索、插入和删除操作的效率至关重要。

BTree和B+Tree详解_b tree-CSDN博客  这里说明了为什么树的高度会影响查找次数,忘记了可以看一下

那平衡二叉树是怎么构造的呢?

构造平衡二叉树的基本步骤

  1. 插入节点:与普通二叉搜索树的插入操作类似,根据节点值的大小,将新节点插入到合适的位置。
    1. 普通二叉搜索树是怎样判定一个节点应该插入到哪里的?
      1. 在普通二叉搜索树中,插入一个新节点的过程如下:

      2. 从根节点开始,比较新节点的值与当前节点的值。

      3. 如果新节点的值小于当前节点的值,移动到当前节点的左子树。
      4. 如果新节点的值大于当前节点的值,移动到当前节点的右子树。
      5. 重复上述步骤,直到找到一个空的位置,将新节点插入到该位置。
    2. 普通二叉搜索树插入节点时,第一个要比较的就是根节点,那是怎么定位到根节点的?
      1. 在普通二叉搜索树中,根节点是树的起始点,所有其他节点都是通过根节点逐步访问到的。定位根节点通常是通过程序中的一个引用或指针来实现的。在大多数编程语言中,二叉搜索树的根节点通常被定义为一个类的属性或变量。
        class BinarySearchTree {
            private TreeNode root; // 根节点
            //... 其他成员函数和变量
        }

        root变量或属性直接指向二叉搜索树的根节点。当需要访问根节点时,可以通过这个变量或属性来实现。例如,在插入新节点时,可以通过root属性来访问根节点,并开始比较新节点的值与根节点的值,以确定新节点应该插入到树的哪个位置。

  2. 检查平衡:插入新节点后,从插入节点开始,向上检查每个节点的平衡因子(即左子树高度减去右子树高度)。
  3. 调整平衡:如果某个节点的平衡因子超出了[-1, 1]的范围,说明树失去了平衡,需要进行调整。调整操作包括左旋、右旋、先左旋后右旋、先右旋后左旋等,具体的调整方式取决于节点的不平衡类型。
    1. 为什么可以改变叶子节点的父节点之后还能保证二叉树的排序是正确的,不会影响二叉树的搜索?
    2. 可以看一下左旋
      1. 在进行左旋操作时,需要注意以下几点:

      2. 旋转节点的选择旋转节点应该是树中高度差超过1的节点
      3. 子节点的调整:在旋转过程中,需要正确地调整子节点的关系,以确保树的结构仍然是一棵有效的二叉搜索树。(即左子树的所有节点值小于根节点值,右子树的所有节点值大于根节点值,可能要调整多个节点)
        1. 旋转后的二叉树搜索性质是根据什么调整算法保证的?
      4. 父节点的更新:在旋转后,需要更新旋转节点和新根节点的父节点关系。
      5. 通过左旋操作,可以有效地调整二叉搜索树的结构,使其保持平衡,从而提高树的性能。

平衡多叉树:

画出索引结构存储情况:

在B+Tree中,一个节存储多个索引key信息且保证排序 ,是通过分裂节点实现的,可以看这篇,

以上的图片需要更新。。。。因为mysql的innoDB存储引擎是按页存储的,且默认会设置主键,并且根据主键构建聚集索引来存储全部数据,这个很重要,可以搜聚集索引和非聚集索引

数据结构之BTree、B+Tree的含义及区别

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

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

相关文章

FileZilla 报错解决

一、错误:严重错误: 无法连接到服务器 解决方法:FileZilla站点的用户名密码要和linux用户名密码保持一致,出现这个报错大概率是用户名和密码不一致导致的。 二、错误:文件传输失败 解决方法:检查linux下的文件夹是否有可执行权限…

替代Postman ,17.3K star!

现在,许多人都朝着全栈工程师的方向发展,API 接口的编写和调试已成为许多开发人员必备的技能之一。 工欲善其事,必先利其器。拥有一款优秀的 API 工具对于任何工程师来说都是极为重要的,它能够帮助我们高效地完成各种开发任务。 …

Flutter 3.24.5安装配置——2024年11月26日

目录 1️⃣前置安装使用环境配置步骤安装Flutter SDK安装Android SDK修改文件默认安装位置(.gradle, AVD)开始项目 2️⃣执行结果🪲Bug找不到**.jar文件 🔗参考链接 1️⃣前置安装 使用环境 Windows 11IDEA 2024.2.3Flutter 3.2…

Perforce SAST专家详解:自动驾驶汽车的安全与技术挑战,Klocwork、Helix QAC等静态代码分析成必备合规性工具

自动驾驶汽车安全吗?现代汽车的软件包含1亿多行代码,支持许多不同的功能,如巡航控制、速度辅助和泊车摄像头。而且,这些嵌入式系统中的代码只会越来越复杂。 随着未来汽车的互联程度越来越高,这一趋势还将继续。汽车越…

(计算机组成原理)期末复习

第一章 计算机的基本组成:硬件软件(程序)计算机系统 软件有系统软件(系统管理工具),应用软件 计算机硬件:包括主机和外设,主机包括CPU和内存,***CPU由运算器和控制器所组…

UEFI 中的 Protocol

Protocol 在 UEFI 内核中的表示 typedef VOID *EFI_HANDLE;EFI_HANDLE是指向某种对象的指针,UEFI 用它来表示某个对象。 UEFI 扫描总线后,会为每个设备建立一个 Controller 对象,用于控制设备,所有该设备的驱动以 Protocol 的形式…

量子安全与经典密码学:一些现实方面的讨论

量子安全与经典密码学 背景:量子安全与经典密码学量子计算对传统密码学的威胁 安全性分析经典密码学的数学复杂性假设**量子密码学的物理不可克隆性假设** **性能与实现难度**后量子算法在经典计算机上的运行效率**量子通信设备的技术要求与成本** **可扩展性与适用…

【大模型】LLaMA-Factory的环境配置、微调模型与测试

前言 【一些闲扯】 时常和朋友闲聊,时代发展这么快,在时代的洪流下,我们个人能抓住些什么呢。我问了大模型,文心一言是这样回答的: 在快速发展的时代背景下,个人确实面临着诸多挑战,但同时也充满…

PostgreSQL的学习心得和知识总结(一百五十八)|在线调优工具pgtune的实现原理和源码解析

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

汽车渲染领域:Blender 和 UE5 哪款更适用?两者区别?

在汽车渲染领域,选择合适的工具对于实现高质量的视觉效果至关重要。Blender和UE5(Unreal Engine 5)作为两大主流3D软件,各自在渲染动画方面有着显著的差异。本文将从核心定位与用途、工作流程、渲染技术和灵活性、后期处理与合成四…

机器学习—迁移学习:使用其他任务中的数据

对于一个没有那么多数据的应用程序,迁移学习是一种奇妙的技术,它允许你使用来自不同任务的数据来帮助你的应用程序,迁移学习是如何工作的? 以下是迁移学习的工作原理,假设你想识别手写的数字0到9,但是你没…

LeetCode 3206.交替组 I:遍历

【LetMeFly】3206.交替组 I:遍历 力扣题目链接:https://leetcode.cn/problems/alternating-groups-i/ 给你一个整数数组 colors ,它表示一个由红色和蓝色瓷砖组成的环,第 i 块瓷砖的颜色为 colors[i] : colors[i] …

如何通过高效的缓存策略无缝加速湖仓查询

引言 本文将探讨如何利用开源项目 StarRocks 的缓存策略来加速湖仓查询,为企业提供更快速、更灵活的数据分析能力。作为 StarRocks 社区的主要贡献者和商业化公司,镜舟科技深度参与 StarRocks 项目开发,也为企业着手构建湖仓架构提供更多参考…

25A物联网微型断路器 智慧空开1P 2P 3P 4P-安科瑞黄安南

微型断路器,作为现代电气系统中不可或缺的重要组件,在保障电路安全与稳定运行方面发挥着关键作用。从其工作原理来看,微型断路器通过感知电流的异常变化来迅速作出响应。当电路中的电流超过预设的安全阈值时,其内部的电磁感应装置…

目标检测,图像分割,超分辨率重建

目标检测和图像分割 目标检测和图像分割是计算机视觉中的两个不同任务,它们的输出形式也有所不同。下面我将分别介绍这两个任务的输出。图像分割又可以分为:语义分割、实例分割、全景分割。 语义分割(Semantic Segmentation)&…

16 —— Webpack多页面打包

需求&#xff1a;把 黑马头条登陆页面-内容页面 一起引入打包使用 步骤&#xff1a; 准备源码&#xff08;html、css、js&#xff09;放入相应位置&#xff0c;并改用模块化语法导出 原始content.html代码 <!DOCTYPE html> <html lang"en"><head&…

《PH47 快速开发教程》发布

PDF 教程下载位于CSDN资源栏目&#xff08;网页版本文上方&#xff09; 或Gitee&#xff1a;document ss15/PH47 - 码云 - 开源中国

腾讯云OCR车牌识别实践:从图片上传到车牌识别

在当今智能化和自动化的浪潮中&#xff0c;车牌识别&#xff08;LPR&#xff09;技术已经广泛应用于交通管理、智能停车、自动收费等多个场景。腾讯云OCR车牌识别服务凭借其高效、精准的识别能力&#xff0c;为开发者提供了强大的技术支持。本文将介绍如何利用腾讯云OCR车牌识别…

C++ 优先算法 —— 无重复字符的最长子串(滑动窗口)

目录 题目&#xff1a; 无重复字符的最长子串 1. 题目解析 2. 算法原理 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口&#xff08;同向双指针&#xff09; 3. 代码实现 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口 题目&#xff1a; 无重复字符的最长子串 1. 题目解析 题目截图&#xff1a; 此题所说的…

[网安靶场] [更新中] UPLOAD LABS —— 靶场笔记合集

GitHub - c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场一个想帮你总结所有类型的上传漏洞的靶场. Contribute to c0ny1/upload-labs development by creating an account on GitHub.https://github.com/c0ny1/upload-labs 0x01&#xff1a;UPLOAD LABS 靶场初识…