B树介绍

  • B树是一种平衡的多路搜索树,多用于硬盘,文件系统,数据库。

m阶B树性质

  1. 根节点下子节点数为 [2,m]
  2. 一个m阶B树的key数量x为: ⌈m2⌉−1<=x<=m−1⌈ \frac{m}{2}⌉ -1 <= x <= m -1⌈2m​⌉−1<=x<=m−1
  3. 除了根结点和叶子结点外,一个m阶B树的childs数量y为: ⌈m2⌉<=y<=m⌈\frac{m}{2}⌉ <= y <= m⌈2m​⌉<=y<=m
  • 三阶B树子节点个数: [ceiling(3/2),3]=[2,3][ceiling(3/2) ,3] = [2,3][ceiling(3/2),3]=[2,3] 每个节点可以有2~3个子节点 称为 二三树
  • 四级B树子节点个数: [ceiling(4/2),4))=[2,4][ceiling(4/2) ,4)) = [2,4][ceiling(4/2),4))=[2,4] 每个节点可以有2~4个子节点
    称为 二三四树
  1. 所有叶子节点都在,同一深度。
  2. 每个节点中的元素(key)从小到大排列。
  3. 每个元素(key)字左结点的值,都小于或等于该元素(key)。右结点的值都大于或等于该元素(key)。

B树能解决什么问题

不同容量的存储器,访问速度差异悬殊。
磁盘(ms级别) << 内存(ns级别), 100000倍
若内存访问需要1s,则一次外存访问需要一天
为了避免1次外存访问,宁愿访问内存100次…
所以将最常用的数据存储在最快的存储器中

普通的二叉树,如红黑树,AVL树,它们的应用场景,只适合在内存中直接读写,算法复杂度为O(logn)O(log_n)O(logn​)级别的,但是如果大量数据在硬盘中存储时,假设 你电脑里 有一百万个文件, 如果你要找 一个文件通过文件名那么 你通过 红黑树去找 log21000000=20log_{2}^{1000000}= 20log21000000​=20 那么 你每次 去硬盘取一个节点,连续的你需要去取最多20次 才能找到你所需要的文件。一般一次磁盘的IO时间在20 ~ 30 ms 左右,那么 整个 过程 大概也要500ms 左右吧,你可能说想 不到半秒 也不是很慢吗,但是你要知道 CPU在500ms的时间内能处理 几十亿次运算,所以 你电脑CPU再好也得折在磁盘IO上,普通二叉树的结构在对磁盘这种存储介质读取的时候 完全跟不上 CPU 和 内存的响应时间,会拖慢整个系统的响应速度,所以 为了解决这个问题
就产生了B树,原来每次搜索 我只能 排除一半数据的,B树内含 多个key这样的话,多个子节点,这样 可以大大减少磁盘IO访问的次数,还是一百万个数据,如果用100阶B树的话, 那么log1001000000=3log_{100}^{1000000}=3log1001000000​=3只需要最多 3次就能,找到所需要的数据。

上面我们讲到了为什么使用B树的一点好处,同时使用B树 同时根据 局部性原理
当一个数据被用到时,其附近的数据也通常会马上被使用。 通常读取一次硬盘 最小单位 大概在4k (取决于文件系统),也就是说 你读1B 和 读 4k花费的是一样的成本,前面讲到的红黑树 我们不能很好的利用 局部性原理,存储一个节点 可能只要不到1K的数据,那么 剩下的3k+ 数据 也就被浪费掉了,而B树就可以很好的利用局部性原理 ,假设存储一个key 和 下一个node指针 需要 20个字节,那么 我们就可以 计算出 1024 * 4 / 20 = 204 个索引值,就是 205阶B树。

我们先来 定义 基本的数据结构

#[derive(Debug)]
//B树节点
struct  BtreeNOde<T>{leaf:bool, //是否叶子n:i32, //分支的数量keys:Vec<T>,//存储keyschildren:Vec<Box<BtreeNOde<T>>>,//指向自己的多个分支节点
}
#[derive(Debug)]
struct Btree<T> {Root:Option<Box<BtreeNOde<T>>>,branch:i32, //分支数
}

B树的搜索

B树的搜索较为 简单,我们只需要判断 当前这个数 是否大于前一个数小于当前数
如果满足条件,就 往下一层去搜索,直到搜索到 相等的结束,直到搜索到叶子节点结束搜索。

B树的插入

  1. 插入的节点必然添加在叶子节点。
  2. 如果插入节点包含m-1个keys 需要上溢处理。

数据结构之树从入门到如土(四)----从零开始入门Rust实现一颗B树(未完成待续)相关推荐

  1. 【编程题目】输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印...

    第 16 题(树): 题目(微软): 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印. 例如输入 8 / \ 6 10 / \ / \ 5 7 9 11 输出 8 6 1 ...

  2. 字典树实现_【Leetcode每日打卡】单词的压缩编码 Trie(字典树)入门

    一.前言(鸡汤(一段废..话..可以跳过啦)) 同学们好!没想到我这个小小的公众号破千粉啦,对于大佬们而言或许不值一提,但是对我而言是一个莫大的鼓舞!更加坚定了我持续输出优质内容的决心.希望我们都能每 ...

  3. 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截...

    程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构  .要想在之后的江湖历练中通关,数据结构必不可少.数据 ...

  4. 数据结构与算法第二章 线性表、栈、队列、数组、字符串、树、二叉树、哈希表的增删查

    03 增删查:掌握数据处理的基本操作,以不变应万变 通过前面课时的学习,相信你已经建立了利用数据结构去完成时空转移的思想.接下来,你需要在理论思想的指导下灵活使用.其实,要想灵活使用数据结构,你需要先 ...

  5. DSA 经典数据结构与算法 学习心得和知识总结(四) | AVL树

    AVL树 从BST的角度看AVL AVL的定义及性质 AVL树的结构定义 AVL树的旋转算法 左左情况---右旋 右右情况---左旋 左右情况---左右旋 右左情况---右左旋 AVL树的遍历操作 A ...

  6. 数据结构树、二叉树、完全二叉树、二叉查找树、平衡二叉树、红黑树、B+树

    树.二叉树.平衡二叉树.二叉搜索树 树的前序遍历.中序遍历和后序遍历 树的前序遍历.中序遍历和后续遍历是以遍历时根所在的位置顺序命名的.层次遍历即按层从上至下,从左至右遍历即可. 前序遍历:根-> ...

  7. Unity3d入门到如土

    文章目录 前言 一:c#的基础语法 二:入门 三:进阶 四:游戏的优化 前言 这是我从2021年自学Unity到至今的分享, 一:c#的基础语法 二:入门 三:进阶 四:游戏的优化

  8. 深入入门正则表达式(java) - 1 - 入门基础

    深入入门正则表达式(java) - 引言 深入入门正则表达式(java) - 1 - 入门基础  深入入门正则表达式(java) - 2 - 基本实例 深入入门正则表达式(java) - 3 - 正则 ...

  9. python单片机编程入门先学什么_编程入门必看:带你零基础了解编程和编程语言,入门应该学什么?...

    编程入门 什么是编程 我们通过有固定格式和固定词汇的"语言"来控制他人,让他人为我们做事情.语言有很多种,包括汉语.英语.法语.韩语等,虽然他们的词汇和格式都不一样,但是可以达到同 ...

最新文章

  1. 一位大神写的js爬虫
  2. redis 判断存在性_Redis如何保证接口的幂等性?
  3. R统计工具:正态性检验
  4. java获取多线程执行结果几种方式小结
  5. Centos7 使用 chronyd 进行时钟同步
  6. jBPM4.3+ssh+会签 整合配置及完整实例
  7. 学习爬虫的第三天 (bs4 \ urllib \ xlwt \ re 的练习爬取豆瓣top250保存成excel格式)
  8. 遥感原理与应用:绪论基础知识
  9. 【毕业设计】 基于STM32的人体红外测温枪温度采集系统
  10. 第三章 一元函数积分概念、计算及应用
  11. 基于ARM-Linux系统开发平台下嵌入式MP3的设计与实现
  12. 如何把NDI|HX2视频源通过高清解码器进行解码?
  13. 创业者防坑手册:面对强大的资本力量,你该如何正当防卫?
  14. 蓝色巨人IBM的变革与复兴,大数据时代的人工智能 IBM Watson
  15. Java IO有这么难吗?
  16. 网络游戏开发成本,运营成本,收入
  17. 操作系统实验二进程的创建控制实验(含代码及实验心得)
  18. 2020春季校园招聘求职总结
  19. html 输入框键盘遮挡,解决输入框被键盘挡住的问题
  20. 【python】习题 6-10周

热门文章

  1. 好用的在线二维码生成器网站PHP源码
  2. 计算机系统底层架构思路
  3. Java开发常见面试题详解(并发,JVM)
  4. 关于树莓派(四):安装树莓派时遇见的错误
  5. 初创公司股权结构应该怎么设计?举例三种模型
  6. 氮化镓充电器哪家做得好_性价比最高的氮化镓充电器是哪一款?
  7. websocket 爬虫
  8. 《变形金刚》编年史『经典文章变形金刚迷们必看』
  9. 利用腾讯会议开展远程面试的解决方案
  10. Linux 硬盘管理工具