【数据结构】B树的理解
B树满足的条件
B树是一种多路搜索树(并不是二叉的):
1.定义任意非叶子结点最多只有M个儿子;且M>2;
2.根结点的儿子数为[2, M];
3.除根结点以外的非叶子结点的儿子数为[M/2, M];
4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)
5.非叶子结点的关键字个数=指向儿子的指针个数-1;
6.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];
7.非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;
8.所有叶子结点位于同一层;
其结构可以简单定义为:
typedef struct {/*文件数*/int file_num;/*文件名(key)*/char * file_name[max_file_num];/*指向子节点的指针*/BTNode * BTptr[max_file_num+1];/*文件在硬盘中的存储位置*/FILE_HARD_ADDR offset[max_file_num];
}BTNode;
下面动图是往B树中依次插入6 10 4 14 5 11 15 3 2 12 1 7 8 8 6 3 6 21 5 15 15 6 32 23 45 65 7 8 6 5 4
再举个例子说明B树的查找过程,如下图:(M=3)
为了简单,这里用少量数据构造一棵3叉树的形式,实际应用中的B树结点中关键字很多的。上面的图中比如根结点,其中17比表示一个磁盘文件的文件名;小红方块表示这个17文件内容在硬盘中的存储位置;p1表示指向17左子树的指针。
假如每个盘块可以正好存放一个B树的结点(正好存放2个文件名)。那么一个BTNODE结点就代表一个盘块,而子树指针就是存放另外一个盘块的地址。
下面,咱们来模拟下查找文件29的过程:
1、根据根结点指针找到文件目录的根磁盘块1,将其中的信息导入内存。【磁盘IO操作 1次】
此时内存中有两个文件名17、35和三个存储其他磁盘页面地址的数据。根据算法我们发现17<29<35,因此我们找到指针p2。
2、根据p2指针,我们定位到磁盘块3,并将其中的信息导入内存。【磁盘IO操作 2次】
此时内存中有两个文件名26,30和三个存储其他磁盘页面地址的数据。根据算法我们发,26<29<30,因此我们找到指针p2。
3、根据p2指针,我们定位到磁盘块8,并将其中的信息导入内存。【磁盘IO操作 3次】
此时内存中有两个文件名28,29。根据算法我们查找到文,29,并定位了该文件内存的磁盘地址。
4、分析上面的过程,发现需要3次磁盘IO操作和3次内存查找操作。关于内存中的文件名查找,由于是一个有序表结构,可以利用折半查找提高效率。至于IO操作时影响整个B树查找效率的决定因素。
当然,如果我们使用平衡二叉树的磁盘存储结构来进行查找,磁盘4次,最多5次,而且文件越多,B树比平衡二叉树所用的磁盘IO操作次数将越少,效率也越高。
【数据结构】B树的理解相关推荐
- 数据结构显示树的所有结点_您需要了解的有关树数据结构的所有信息
数据结构显示树的所有结点 When you first learn to code, it's common to learn arrays as the "main data struct ...
- 数据结构 | B树、B+树、B*树
文章目录 搜索结构 B树 B树的插入 B树的遍历 B树的性能 B+树 B+树的插入 B+树的遍历 B*树 B*树的插入 总结 搜索结构 如果我们有大量的数据需要永久存储,就需要存储到硬盘之中. 但是硬 ...
- python 树状数组_【算法日积月累】19-高级数据结构:树状数组
树状数组能解决的问题 树状数组,也称作"二叉索引树"(Binary Indexed Tree)或 Fenwick 树. 它可以高效地实现如下两个操作: 1.数组前缀和的查询: 2. ...
- 数据结构—2-3树、2-3-4树、B树、B+树等多路查找树的原理详解
详细介绍了多路查找树中的2-3树.2-3-4树.B树.B+树的概念的区别,以及它们的应用场景. 文章目录 1 多路查找树的概述 1.1 索引概述 1.2 多路查找树的引出 2 2-3树 2.1 2-3 ...
- 【图解数据结构】树和二叉树全面总结(上)
目录 一.前言 二.树的概念和定义 三.二叉树 1.基本概念 2.基本形态 3.性质 4.满二叉树 5.完全二叉树 四.存储结构 1.顺序存储 2.二叉链表 3.三叉链表 一.前言 学习目标:理解树和 ...
- 【数据结构】初入数据结构的树(Tree)以及Java代码实现(一)
初入数据结构的树(Tree)以及Java代码实现(一) 树的定义 为什么叫树? 树型结构的元素具有一对多关系 树的定义 树的一些基本概念 树的结点 后代,祖先 子树.空树 树的度与高(深度),结点的度 ...
- python树结构_数据结构的树存储结构
之前介绍的所有的数据结构都是线性存储结构.本章所介绍的树结构是一种非线性存储结构,存储的是具有"一对多"关系的数据元素的集合. (A) ...
- 数据结构树的基本操作_《数据结构》树的基本操作.doc
<数据结构>树的基本操作 实验四 课程名称:完成日期:姓名:学号:指导教师:实验名称:实验序号:实验成绩:一.实验目的及要求 二.实验环境.实验内容 求出它的深度. .调试过程及实验结果 ...
- 数据结构-王道-树和二叉树
[top] 树和二叉树 树:是\(N(N\geq0)\)个结点的有限集合,\(N=0\)时,称为空树,这是一种特殊情况.在任意一棵非空树中应满足: 有且仅有一个特定的称为根的结点. 当\(N>1 ...
- (八)数据结构之“树”
数据结构之"树" 树是什么? 什么是深度/广度优先遍历? 深度优先遍历算法口诀 广度优先遍历算法口诀 二叉树的先中后序遍历 二叉树是什么 先序遍历算法口诀(根 > 左 > ...
最新文章
- JavaScript中变量的相互引用
- c语言元素插入数组并排序,一数组按顺序序存放,插入一个数,按原来排序规律放在相应位置...
- zabbix模板_基于zabbix网页配置自定义tomcat监控模板--监控项、触发器
- 华为徐直军:今年超3亿设备搭载鸿蒙系统
- OpenGLES渲染
- [20190226]测试使用bbed恢复索引.txt
- java解析字符串_java 拼接字符和解析字符串
- sonar下载安装配置教程
- 利用halcon的深度学习网络进行目标检测
- 可编程渲染管线(SRP)_学习笔记
- 一个迅雷480M,是搞笑的吗?
- 华为机试4.20:新员工考试
- oracle的报表工具有哪些,报表开发常用的六款小工具
- EasyWeChat生成小程序码
- 机器视觉系统——照明
- 正态性检验ks和sw区别_t检验常见问题汇总解答,你想知道的都在这里
- 2022秋季C语言专题实验03-一维数组
- 网络1711班 C语言第一次作业批改总结
- c语言数据类型习题,C语言-数据类型习题及答案.doc
- 项目管理-会议运作机制