B树

概述

动机: B树实现高速I/O

640K如何"满足"任何实际需求了-- 源自比尔·盖茨的一个笑话

前提知识

  1. 高速缓存

    • 为什么高速缓存有效?

      • 不同容量的存储器,访问速度差异悬殊,磁盘和内存访问速度的量级相差\(>10^5\)

        • 如果将访问内存比喻为1秒,那么访问外存则相当于1天
        • 因此我们需要尽量减少IO次数
  2. 分级I/O
    • 俩个相邻存储级别之间的数据传输,统称为IO操作
    • CPU -> RAM -> DISK -> ARRAY
    • 访问速度依次递减,存储容量依次递增
    • 常用的数据要放在最前面
  3. 从磁盘读取1B和读写1KB几乎一样快

问题:

B树为什么更宽更矮

B树实际也是BST,但是其对节点的定义方式不一样, 其定义的节点为超级节点

超级节点的概念:

如果我们将2代节点合并,并把它们都踩扁了,就会拥有4路,3个关键码

同理:每d代合并,就会拥有m =2^d路,m-1个关键码

  • 多级存储系统中使用B树,可以针对外部查找,大大减少IO次数

    • 对于常规BST来说,IO次数太高

      • 对于AVL树来说,如果访问1G数据,10^9个关键码,一次只读取一个数据得到logN = 30 需要30次IO访问。
    • 对于B树来说,则批量访问数据,一次读入一个超级节点
    • 因此B树的主要目的就是为了减少IO次数

B树定义

  • m阶B树:即m路平衡搜索树

对于m阶B树来说

关键码:

  • 上限:有不超过m-1个关键码, 即n <= m - 1个关键码——

    \[ K_1 < K_2 < K_3 < ... < K_(n-1) < K_n \]

  • 下限:

    对于根节点来说,则只要有不少于1个关键码就行
    对于其他节点来说,有不少于\(\lceil \frac{m}{2} \rceil - 1 <= n\) 个关键码

分枝数

  • 上限:有不超过m个分支, 即n + 1 <= m个分支数——

    \[ A_0 < A_1 < A_2 < A_3 < ... < A_(n-1) < A_n \]

  • 下限:内部节点的分支数也不能太少

    对于根节点来说: 2 <= n + 1 "但树根是比较特殊的存在

    对于其他节点来说:有不少于\(\lceil \frac{m}{2} \rceil <= n + 1\)个分支

简单举例:

  • 2-4 树 —— 4阶B树,分支在2-4之内 这个树比较特殊

    邓俊辉数据结构学习-8-2-B树的更多相关文章

    1. 邓俊辉数据结构学习-7-BST

      二叉搜索树(Binary-Search-Tree)--BST 要求:AVL树是BBST的一个种类,继承自BST,对于AVL树,不做太多掌握要求 四种旋转,旋转是BBST自平衡的基本,变换,主要掌握旋转 ...

    2. 清华大学慕课 (mooc) 数据结构-邓俊辉-讲义-合并版

      邓公的数据结构一直好评如潮,可惜我如今才开始学习它.QAQ 昨天,<数据结构 (2020 春)>的讲义已经推到清华大学云盘上了.苦于 10 拼页的打印版不易在 PC 上阅读(手机上更是如此 ...

    3. 数据结构(三)--- B树(B-Tree)

         文章图片代码来自邓俊辉老师的课件 概述 上图就是 B-Tree 的结构,可以看到这棵树和二叉树有点不同---"又矮又肥".同时子节点可以有若干个小的子节点构成.那么这样一棵树 ...

    4. 数据结构(二) --- 伸展树(Splay Tree)

      文章图片和代码来自邓俊辉老师课件 概述 伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.它由丹尼尔·斯立特Daniel Sleator ...

    5. 算法设计和数据结构学习_5(BST&AVL&红黑树简单介绍)

      前言: 节主要是给出BST,AVL和红黑树的C++代码,方便自己以后的查阅,其代码依旧是data structures and algorithm analysis in c++ (second ed ...

    6. 数据结构学习之字符串匹配算法(BF||KMP)

      数据结构学习之字符串匹配算法(BF||KMP) 0x1 实验目的 ​ 通过实验深入了解字符串常用的匹配算法(BF暴力匹配.KMP.优化KMP算法)思想. 0x2 实验要求 ​ 编写出BF暴力匹配.KM ...

    7. 数据结构学习之栈求解n皇后问题

      数据结构学习之栈求解n皇后问题 0x1 目的 ​ 深入掌握栈应用的算法和设计 0x2 内容 ​ 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...

    8. 1.基础: 万丈高楼平地起——Redis基础数据结构 学习记录

      <Redis深度历险:核心原理和应用实践>1.基础: 万丈高楼平地起——Redis基础数据结构 学习记录http://naotu.baidu.com/file/b874e2624d3f37 ...

    9. ES6中Map数据结构学习笔记

      很多东西就是要细细的品读然后做点读书笔记,心理才会踏实- Javascript对象本质上就是键值对的集合(Hash结构),但是键只能是字符串,这有一定的限制. 1234 var d = {}var e ...

    随机推荐

    1. python操作sql server2008 pyodbc

      使用Python通过PyODBC连接数据的注意事项 今天使者用PyODBC连接数据库,试了很久才出来,现把一些心得体会和大家分享! 一.PyODBC的下载地址: http://code.google. ...

    2. 问题:oracle nvl;结果:Oracle中的NVL函数

      Oracle中的NVL函数 (2012-11-30 13:21:43) 转载▼ 标签: nvl oracle 分类: Oracle Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换 ...

    3. 02_android下单元测试

      Java的单元测试JUnit. Java程序入口是main方法.一般不在安卓程序入口 @Override protected void onCreate(Bundle savedInstanceSta ...

    4. 使用log4j出现缺失com.sun.jdmk:jmxtools:jar:1.2.1

      用maven引用log4j出现缺失com.sun.jdmk:jmxtools:jar:1.2.1的错误提示 解决方案一:使用1 .2 .15之前版本的log4j 解决方二: <dependenc ...

    5. SpringBoot04 项目热部署详解

      1 热部署 优点:适用于本地和线上.无需重启服务器 2 热部署和热加载的联系和区别 2.1 联系 不用重启服务器就可以编译和部署项目 都是基于Java的类加载器实现 2.2 字面区别 热部署在服务器运 ...

    6. VCF文件处理工具PyVCF

      vcf格式示例 ##fileformat=VCFv4.1 ##FILTER=<ID=LowQual,Description=”Low quality”> ##FORMAT=<ID=A ...

    7. 怀旧系列(3)----Pascal

      Pascal语言是高中时代2000年左右为了参加计算机竞赛学习的一门语言(Turbo Pascal7.0).据说这么语言的结构化非常好,非常适合青少年形成一定的编程思想.但是现在的角度想想都是扯淡,现 ...

    8. chrome - Vimium 插件超级方便快捷键

      Vimium插件作用 安装后,可以用定义好的快捷键操作浏览器,好用到爆粗口 下载地址 https://chrome.google.com/webstore/detail/vimium/dbepggeo ...

    9. HBase高可用原理与实践

      前言 前段时间有套线上HBase出了点小问题,导致该套HBase集群服务停止了2个小时,从而造成使用该套HBase作为数据存储的应用也出现了服务异常.在排查问题之余,我们不禁也在思考,以后再出现类似的 ...

    10. PostgreSQL 务实应用(四/5)JSON

      JSON 可谓风靡互联网,在数据交换使用上,其优势特别明显,其结构简洁.可读易读.形式灵活.很多 API 接口的数据都采用 JSON 来表示. PostgreSQL 对 JSON 提供了良好的支持.具 ...