B树系列解析

- 我最近开了几个专栏,诚信互三!
====> |||《算法专栏》::刷题教程来自网站《代码随想录》。|||
====> |||《C++专栏》::记录我学习C++的经历,看完你一定会有收获。|||
====> |||《Linux专栏》::记录我学习Linux的经历,看完你一定会有收获。|||
====> |||《C#专栏》::记录我复习C#的经历,深度理解,查漏补缺,不定期更新。|||
====> |||《计算机网络专栏》::记录我学习计算机网络,看完你一定会有收获。|||
====> |||《mysql数据库》::记录我学习数据库,看完你一定会有收获。|||
B树系列解析
- B树的优势
- B树的结构
- B树的增加
- B+树的结构
- B+树的插入
- B*树了解
B树的优势
B树系列都擅长外查询,及查询磁盘中的数据,B树都是一棵多叉树,对于二叉搜索树来说,查询到一个结点的时间复杂度位logN,而一颗B树,查询都一个结点的时间复杂的位logM^N,着两者在内存级别时,差别不大,但是在磁盘级别能节约多次磁盘IO的时间,从而大大加快查询的速度。
因此,该数据结构常常用于需要大量进行磁盘IO的情况,如文件系统以及数据库的索引。
B树的结构
B树满足以下几点要求,假设这是一颗M叉树。
1).B树的根结点至少有两个孩子。
2).B树的每个结点要有k个孩子和k-1个关键字,up(M/2)<=k<=M。
3).叶子结点没有孩子只有关键字。
4).B树关键字的左孩子的关键字比当前关键字都小,右孩子关键字比当前关键字大。

B树在设计结构的时候,我们往往会多设计一个关键字结点和孩子结点,这样好判断分裂的情况。
B树的增加
B树插入值时,是插入到叶子结点,此时有两者情况。
1).叶子结点没满,则直接插入。
2).叶子结点满了,则会进行分裂,将结点的关键字的二分之一拷贝到另一个结点,以及其所对应的孩子,同时提取第一个结点的中位数,加入到父节点,让两个结点连接到父节点的中位数下。

更具上述对于B树的插入描述,可知,B树是向右,向上成长的,所以B树天然平衡。
B+树的结构
B+树是B树的新版本,也是mysql中索引使用的数据结构,它相较于B+树存在一些优势。
1).结构更简单,B+树有K个关键字和K个孩子,K[i]号关键字的孩子C[i]比K[i]大,C[i - 1]比K[i]小。
2).B+树的所有插入的值都在叶子结点,叶子结点通过指针相互连接起来。
3).综上,B+树的分支结点存的是索引,而不是值。
4).B+树遍历查询十分方便,所以查询某个范围的值效率高。

B+树也是向右向上生长,所以也天然平衡。
B+树的插入
B+树插入值时,需要先分裂一个结点,插入情况如下。

插入第一个结点,需要先分裂一个,随后每次插入都往叶子结点插入。
如果插入的结点小于叶子结点的最小值,则需要更新父节点的关键字,如果满了,则直接分裂一半关键字和孩子,不需要提取中位数,直接将第二个结点的最小值付给父节点的关键字。
B*树了解
B*树是对B+树的一次优化,以减少B+树的空间浪费。
插入关键字导致结点满了后,将该结点给兄弟结点,如果兄弟结点也满了,则两个结点各自分出1/3给一个新结点。
相关文章:
B树系列解析
我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》࿱…...
docker 部署 WEB IDE
简介 问题描述:GitCode 的 Web IDE 不满足个人使用需求 如何解决:在本机或云服务器部署 Web IDE 如何解决 拉取容器镜像 docker pull coder/code-server 运行 docker run -d --name vscode -p 8080:8080 -p 8443:8443 -e PASSWORD"123456&quo…...
【Android】数据存储
本章介绍Android五种主要存储方式的用法,包括共享参数SharedPreferences、数据库SQLite、SD卡文件、App的全局内存,另外介绍重要组件之一的应用Application的基本概念与常见用法,以及四大组件之一的内容提供器ContentProvider的基本概念与常见…...
个人网络安全的几个重点与防御
1 浏览器 firefox 这是第一选择 如果你真的不明白可以找找各个浏览器漏洞 mail 的危险的 来自与代理和漏洞 浏览器溢出漏洞 实时注意更新就可以 2 防火墙 大家都用windows 只需在 gpedit.msc 设置 但有什么未知漏洞就不得而知了 因为美国的计划问题 网络端口溢出漏洞 但…...
python爬虫 - 初识爬虫
🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、爬虫的关键概念 (一)HTTP请求与响应 ࿰…...
tomcat版本升级导致的umask问题
文章目录 1、问题背景2、问题分析3、深入研究4、umask4.1、umask的工作原理4.2、umask的计算方式4.3、示例4.4、如何设置umask4.5、注意事项 1、问题背景 我们的java服务是打成war包放在tomcat容器里运行的,有一天我像往常一样去查看服务的日志文件,却提…...
Golang | Leetcode Golang题解之第455题分发饼干
题目: 题解: func findContentChildren(g []int, s []int) (ans int) {sort.Ints(g)sort.Ints(s)m, n : len(g), len(s)for i, j : 0, 0; i < m && j < n; i {for j < n && g[i] > s[j] {j}if j < n {ansj}}return }...
vscode+stfp插件,实现远程自动同步文件代码
概述 远程同步代码,将本地代码实时保存到同一局域网内的另一台电脑(linux系统),这里的本地代码也可以是远程服务上的代码,即从一个远程ip同步到另一台远程ip服务器。 工具 vscode,SFTP插件 安装 vscod…...
python 实现djb2哈希算法
djb2哈希算法介绍 DJB2哈希算法是一种简单且快速的哈希算法,由Daniel J. Bernstein设计。这种算法的实现非常简单,适用于短键值的哈希表,也常被用于嵌入式设备和资源受限的系统。 基本原理 DJB2算法的原理是将输入的字符串视为一个字节数组…...
文件夹作为普通文件而非子模块管理
relaxed_ik_ros2 文件夹下存在 .gitmodules 文件和 .gitignore 文件。这说明该目录已经被 Git 识别为子模块。 要将这个文件夹作为普通文件而非子模块管理,你可以按以下步骤操作: 1. 删除子模块配置 首先删除 .gitmodules 文件中的子模块配置。你可以…...
7c结构体
文章目录 一、结构体的设计二、结构体变量的初始化2.1结构体在内存表示;**2.2**结构体类型声明和 结构体变量的定义和初始化只声明结构体类型声明类型的同时定义变量p1用已有结构体类型定义结构体变量p2*定义变量的同时赋初值。*匿名声明结构体类型 2.3 结构体嵌套及…...
浅聊前后端分离开发和前后端不分离开发模式
1.先聊聊Web开发的开发框架Spring MVC 首先要知道,Spring MVC是Web开发领域的一个知名框架,可以开发基于请求-响应模式的Web应用。而Web开发的本质是遵循HTTP(Hyper Text Transfer Protocol: 超文本传输协议)协议【发请求…...
RabbitMQ篇(死信交换机)
目录 一、简介 二、TTL过期时间 三、应用场景 一、简介 当一个队列中的消息满足下列情况之一时,可以成为死信(dead letter) 消费者使用basic.reject或者basic.nack声明消费失败,并且消息的requeue参数设置为false消息是一个过…...
HBase 的 MemStore 详解
一、MemStore 概述 MemStore 是 HBase 的内存存储区域,它是一个负责缓存数据写入操作的组件。每当有写操作(如 Put 或 Delete)发生时,数据会首先被写入到 MemStore 中,而不是直接写入磁盘。MemStore 类似于数据库中的缓…...
【嵌入式软件-数据结构与算法】01-数据结构
摘录于老师的教学课程~~(*๓╰╯๓)~~内含链表、队列、栈、循环队列等详细介绍~~ 基础知识系列 有空再继续更~~~ 目录 【链表】 一、单链表 1、存储结构:带头结点的单链表 2、单链表结点类型的定义 3、创建单链表 1)头插法 2)尾插法 …...
Windows应用开发-解析AVI视频文件
本Windows应用解析AVI视频文件,以表格的方式显示AVI文件结构。并可以将结果保存到bmp图片。下面是,使用该应用解析一部AVI电影获得的图片。 应用开发信息 定义一个INFO结构,包含两个字符串对象,一个ULONGLONG变量,和…...
探索TCP协议的奥秘:Python中的网络通信
引言 在网络通信的世界里,TCP协议(传输控制协议)就如同一座桥梁,连接着数据的发送方和接收方。作为一名拥有20年实战经验的编码专家,我深知TCP协议在构建稳定、可靠的网络应用中的重要性。今天,我将带领大…...
每日学习一个数据结构-树
文章目录 树的相关概念一、树的定义二、树的基本术语三、树的分类四、特殊类型的树五、树的遍历六、树的应用场景 树的遍历一、前序遍历二、中序遍历三、后序遍历使用java代码实现遍历总结 树的相关概念 树是一种重要的非线性数据结构,在计算机科学中有着广泛的应用…...
简单PCL库读文件(linux vscode编译)
#include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/common.h> #include <iostream>int main(int argc, char** argv) {if (argc ! 2) {std::cerr << "请指定 PCD 文件路径" << std::endl;return -…...
【自动驾驶】最近计划看的论文
将对应的论文链接贴出来,当作监督自己。 方向:端到端自动驾驶 方法论文代码UniADhttps://arxiv.org/pdf/2212.10156https://github.com/OpenDriveLab/UniADVADhttps://arxiv.org/pdf/2303.12077https://github.com/hustvl/VADUADhttps://arxiv.org/pdf…...
用一台旧笔记本和朋友联机玩《我的世界》Fear Nightfall整合包,保姆级开服教程(含SakuraFrp配置)
用旧笔记本搭建《我的世界》Fear Nightfall联机服务器的完整指南 1. 为什么选择旧笔记本作为服务器主机? 对于许多《我的世界》玩家来说,和朋友一起体验大型整合包是件令人兴奋的事,但租用云服务器的高昂成本往往让人望而却步。实际上&…...
谷歌 I/O 2026 炸场:Gemini 3.5 Flash 震撼发布!反超 3.1 Pro,开启“全自动 Agent 狂飙”时代
在刚刚开幕的 Google I/O 2026 开发者大会上,谷歌正式扔下了一颗重磅炸弹:发布全新 Gemini 3.5 系列 的首款旗舰轻量模型 —— Gemini 3.5 Flash。 这次的发布极为硬核,谷歌彻底打破了我们对 “Flash 是低配版/轻量版” 的固有认知。根据 Dee…...
ODS怎么转PDF?5种转换方法对比与2026实测工具推荐
当你拿到OpenDocument电子表格(ODS格式)文件,却需要分享成PDF格式时,转换往往成为一个必要步骤。ODS是LibreOffice等开源办公套件的标准格式,具有高度兼容性和数据完整性,但在跨平台分享和打印时࿰…...
PDF怎么转Word不变形?2026保留原排版方法与软件推荐
PDF转Word时遇到排版错乱是许多办公人士的共同困扰。无论是报告、合同还是设计稿,排版混乱往往意味着需要重新手工调整,浪费大量时间。本文整合了2026年最实用的PDF转Word保留原排版方法,以及各类软件工具的详细对比,帮助你快速找…...
从‘Hello World’到工业通信:我的第一个C++ ADS客户端连接倍福PLC踩坑实录
从零搭建C ADS客户端:一位工程师的倍福PLC连接实战手记 第一次在Visual Studio里看到那个红色的编译错误时,我盯着屏幕足足愣了五分钟。"LNK2019: 无法解析的外部符号 __imp_AdsPortOpen",这行冰冷的报错彻底击碎了我以为照着官方…...
终极指南:ChatGPT-Web-Midjourney-Proxy如何实现实时AI交互的WebSocket通信
终极指南:ChatGPT-Web-Midjourney-Proxy如何实现实时AI交互的WebSocket通信 ChatGPT-Web-Midjourney-Proxy是一套集成ChatGPT、Midjourney和GPTs功能的全栈UI解决方案,通过WebSocket技术实现了流畅的实时AI交互体验。本文将深入解析其WebSocket通信机制…...
如何选择最适合的许可证扫描工具:LicenseFinder与其他工具的全面对比分析
如何选择最适合的许可证扫描工具:LicenseFinder与其他工具的全面对比分析 【免费下载链接】LicenseFinder Find licenses for your projects dependencies. 项目地址: https://gitcode.com/gh_mirrors/li/LicenseFinder 在当今开源软件盛行的时代,…...
告别复杂命令:3步搞定M3U8视频下载的终极指南
告别复杂命令:3步搞定M3U8视频下载的终极指南 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 你是否曾经遇到过这样的困扰?在网上找到了心仪的视频教程或精…...
告别B站界面混乱:3步找回经典小电视播放器
告别B站界面混乱:3步找回经典小电视播放器 【免费下载链接】Bilibili-Old 恢复旧版Bilibili页面,为了那些念旧的人。 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Old 你是否对B站新版界面感到无所适从?那些复杂的推荐算法…...
如何用SMUDebugTool完全掌控AMD Ryzen处理器性能
如何用SMUDebugTool完全掌控AMD Ryzen处理器性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.com/gh_mir…...
