数据结构---B树总结

B树总结
这里的B树,也就是英文中的B-Tree,一个 m 阶的B树满足以下条件:
每个结点至多拥有m棵子树;
根结点至少拥有两颗子树(存在子树的情况下),根结点至少有一个关键字;
除了根结点以外,其余每个分支结点至少拥有 m/2 棵子树;
所有的叶结点都在同一层上,B树的叶子结点可以看成是一种外部节点,不包含任何信息;
有 k 棵子树的分支结点则存在 k-1 个关键码,关键码按照递增次序进行排列;
关键字数量需要满足ceil(m/2)-1 <= n <= m-1;

在这里插入图片描述
B树的实际结构
Struct
Num parent d[0] [1] [2] [3] [4] [5]
S[0] [1] [2] [3] [4] [5]
在这里插入图片描述
B树的应用:再文件系统中查找文件,以及数据库中查找建立索引
倒排索引:如果要按多条非主键来查找,用空间换时间,将多条信息用二进制表示起来,与之后都为1的则为所查找
按主键来进行查找:
在这里插入图片描述
总大小比较大,查找时会经常性的引起磁盘和内存之间的切换,导致查询效率低下
在这里插入图片描述
指向ID这条记录的指针,虽然减少了很大的存储空间,减少了磁盘和内存之间的速度差异
1、关键码无序,查找速度慢
2、内存存储数据是按照页面(4k)来存储,按照这样的数据结构,关键码很大机率不处于一个页面,查询时导致页面来回切换(冷热数据)消耗资源,效率不高

1、用B树来存储则效率很高,B树查询效率和二分查找效率等同,时间复杂度都是log(n)
2、B树的每个树按照页面的大小来设计,在查找时,可以很大概率的命中,直接切换需要的页面,不必因为关键码没在一个页面而来回切换页面。
3、查找算法思想:从根节点的最后一个开始向前查找,找到返回(当前节点,以及数据的下标),找不到的话继续遍历接下来的节点,找到比当前查询数据大的下标,继续往下遍历,未找到的话,也返回该节点的指针和数据下标,为插入做准备
4、插入算法思想:如果根节点为空或者头结点为空则直接返回。在树中查找,找到的话直接返回。没有找到的话进行接下来的操作。
(1)查找返回的是要插入的节点以及数据下标。先把数据放入到该节点要插入的位置。
(2)判断当前节点的num是否maxsize,如果大于,则进行分裂。分成两个数据,或者三个数据。
(3)创建新的节点,保存后三个数据。将后三个数据的第一个数据作为根节点插入到根节点中去,如果由根节点,直接插入,没有根节点,则新建一个根节点。
(4)插入完成之后,有可能调整后的根节点又num > maxsize
(5)在进行分裂,知道满足B树的性质为止。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章