邓俊辉数据结构学习-8-2-B树
B树
概述
动机: B树实现高速I/O
640K如何"满足"任何实际需求了-- 源自比尔·盖茨的一个笑话
前提知识
- 高速缓存
- 为什么高速缓存有效?
- 不同容量的存储器,访问速度差异悬殊,磁盘和内存访问速度的量级相差\(>10^5\)
- 如果将访问内存比喻为1秒,那么访问外存则相当于1天
- 因此我们需要尽量减少IO次数
- 不同容量的存储器,访问速度差异悬殊,磁盘和内存访问速度的量级相差\(>10^5\)
- 为什么高速缓存有效?
- 分级I/O
- 俩个相邻存储级别之间的数据传输,统称为IO操作
- CPU -> RAM -> DISK -> ARRAY
- 访问速度依次递减,存储容量依次递增
- 常用的数据要放在最前面
- 从磁盘读取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次数
- 对于常规BST来说,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树的更多相关文章
- 邓俊辉数据结构学习-7-BST
二叉搜索树(Binary-Search-Tree)--BST 要求:AVL树是BBST的一个种类,继承自BST,对于AVL树,不做太多掌握要求 四种旋转,旋转是BBST自平衡的基本,变换,主要掌握旋转 ...
- 清华大学慕课 (mooc) 数据结构-邓俊辉-讲义-合并版
邓公的数据结构一直好评如潮,可惜我如今才开始学习它.QAQ 昨天,<数据结构 (2020 春)>的讲义已经推到清华大学云盘上了.苦于 10 拼页的打印版不易在 PC 上阅读(手机上更是如此 ...
- 数据结构(三)--- B树(B-Tree)
文章图片代码来自邓俊辉老师的课件 概述 上图就是 B-Tree 的结构,可以看到这棵树和二叉树有点不同---"又矮又肥".同时子节点可以有若干个小的子节点构成.那么这样一棵树 ...
- 数据结构(二) --- 伸展树(Splay Tree)
文章图片和代码来自邓俊辉老师课件 概述 伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.它由丹尼尔·斯立特Daniel Sleator ...
- 算法设计和数据结构学习_5(BST&AVL&红黑树简单介绍)
前言: 节主要是给出BST,AVL和红黑树的C++代码,方便自己以后的查阅,其代码依旧是data structures and algorithm analysis in c++ (second ed ...
- 数据结构学习之字符串匹配算法(BF||KMP)
数据结构学习之字符串匹配算法(BF||KMP) 0x1 实验目的 通过实验深入了解字符串常用的匹配算法(BF暴力匹配.KMP.优化KMP算法)思想. 0x2 实验要求 编写出BF暴力匹配.KM ...
- 数据结构学习之栈求解n皇后问题
数据结构学习之栈求解n皇后问题 0x1 目的 深入掌握栈应用的算法和设计 0x2 内容 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...
- 1.基础: 万丈高楼平地起——Redis基础数据结构 学习记录
<Redis深度历险:核心原理和应用实践>1.基础: 万丈高楼平地起——Redis基础数据结构 学习记录http://naotu.baidu.com/file/b874e2624d3f37 ...
- ES6中Map数据结构学习笔记
很多东西就是要细细的品读然后做点读书笔记,心理才会踏实- Javascript对象本质上就是键值对的集合(Hash结构),但是键只能是字符串,这有一定的限制. 1234 var d = {}var e ...
随机推荐
- 问题:C# Dictionary嵌套使用;结果:嵌套Dictionary添加 , C#2.0泛型详细介绍
Dictionary<int, Dictionary<string, string>> dict1 = new Dictionary<int, Dictionary< ...
- Angular08 依赖注入
1 angular应用中依赖注入的工作原理 技巧01:在模块级别进行注册时所有在应用级别的组件都可以使用,因为主模块会导入其他模块,所以在模块中注入就相当于在主模块进行注入操作:懒加载的模块除外 技巧 ...
- 10.Ubuntu16搭建蜜罐Cowrie
一直都想尝试搭建一个蜜罐,因为蜜罐是一款可以对ssh,telnet,http等等协议攻击进行记录,对于输入命令和上传文件均有记录的一款软件. 记录可以设置在日志文件中或者通过配置数据库,导入数据库中方 ...
- 《JavaScript语言精粹》第二章-语法 简单笔记
注释 JavaScript提供两种注释: /* */包围的块注释及//开头的行注释. 注释应该被优先用来提高程序的可读性,注释要精确地描述代码,没有用的注释比没有注释更糟糕. /* */块注释对于被注 ...
- JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承
相关文章: 面向对象的程序设计(一) — 创建对象 http://www.cnblogs.com/blackwood/archive/2013/04/24/3039523.html 继承 继承是OO语 ...
- rest framework 权限
一.权限示例 需求:不同的用户类型有不同的权限 普通用户:只能查看个人信息相关,序号:1 VIP 用户:只能查看个人信息相关,序号:2 SVIP 用户:查看订单相关信息,序号:3 1.新建 app/u ...
- 第三章 Goroutine调度策略(16)
本文是<Go语言调度器源代码情景分析>系列的第16篇,也是第三章<Goroutine调度策略>的第1小节. 在调度器概述一节我们提到过,所谓的goroutine调度,是指程序代 ...
- [CentOS7] minimal安装后 出现 没有ifconfig 无法ping 无法yum could not retrieve mirrorlist http://mirrorlist.centos.org/
刚以minimal方式安装完CentOS,打算看下ip,结果ifconfig没找到(后来得知可以用ip addr查看本机ip) 于是yum grouplist, 结果出现could not retri ...
- hdu3887 Counting Offspring
Counting Offspring HDU - 3887 问你对于每个节点,它的子树上标号比它小的点有多少个 /* 子树的问题,dfs序可以很轻松的解决,因为点在它的子树上,所以在线段树中,必定在它 ...
- [Xcode 实际操作]五、使用表格-(5)设置UITableView的单元格背景颜色
目录:[Swift]Xcode实际操作 本文将演示单元格背景颜色的设置 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先添加两个协 ...
- 邓俊辉数据结构学习-7-BST