B-树的操作总结
来源:互联网 发布:javascript 执行顺序 编辑:程序博客网 时间:2024/06/07 01:16
B-树的操作总结
@(算法学习)
写在前面,关于B-树的操作,需要铭记的是一个神奇的数字
⌈m/2⌉−1 ,这是非根结点的最小关键字数。最大自然是m-1不用多说。插入,删除都将以这个数字为基准进行。所以看到B-树的操作,想一想,哦,有一个数字需要马上闪现。然后才能正确解题。普通的问关键字最少多少,深度最少多少,这个数字也扮演着难以估量的角色。甚至不用推导其他什么公式,直接根据关键字数的范围,就可解决问题。
比如:
http://blog.csdn.net/u011240016/article/details/53149389?locationNum=1&fps=1
B-树的查找
两个基本操作:
- 在B-树中找结点(粗粒度的寻找,快速,跨越式定位)
- 在结点中找关键字
B-树结构通常存在磁盘上,因此第一个基本操作发生在磁盘上,,所以不宜进行次数过多。找到结点后,会把结点调入内存,在内存中进行关键字的查找。
B-树的插入
主要把握插多了如何炸裂的问题。
过程通常是先找到插入位置,再看插入后是否炸裂。不是先检查是否可能超过范围,避免后来的分裂。
- 查找。插入的关键字一定是插入到最底层的非叶结点中。也就是最底层的含有关键字的结点里。B-树下面还有一些纯属打酱油用的没有关键字的号称叶子结点的虚拟结点。
- 插入。B-树中的结点关键字都在
[⌈m/2⌉−1,m−1] 之间。而判定是否可插入的条件是:插入后关键字个数小于m就可以让其插入。然后最大的情况是插入后关键字数变为m,就需要炸裂。这是条件设定导致的隐患。
还不是很清楚为什么要这么设计,分裂是可以被避免的。
分裂:取来一个新的结点,将
注意下标是从1开始计数。
如果父亲结点个数也超过了,则同样的策略向上走。直到根,根的关键字个数要求是
B-树的删除
删除真是奇怪的设计。
删除不必考虑上限,而是删除后结点的关键字个数别小于
小于则结点不能自立,需要抱团取暖 – 合并。
两个大的分类:
- 删除的关键字在非终端节点。
- 删除的关键字在最底层非叶结点,即终端结点(含关键字)。
关键字设为k。
核心思路是:自私。非终端结点为了维护自己的结构不乱,拿左右孩子顶枪子。
第一类: 删除的关键字在非终端节点
1)小于k的左子树关键字个数大于
2)如果左子树不满足,就欺负右子树。如果右子树关键字个数大于
注意到吗,这个递归,将是从左到右。所以子问题是原来问题的完整对映。
3)左右都不满足,即左右子树关键字个数都恰好为
第二类:删除的关键字在最底层非叶结点,即终端结点(含关键字)。
1)被删除关键字所在结点关键字个数大于
2)兄弟够借。如果被删除关键字所在的结点关键字个数是最少的
左兄弟不够,右兄弟够,也是这种父子移位法。父亲把删除关键字结点的后驱拿给它,然后右兄弟把最小的拿到父亲结点。
3)兄弟都很穷。父亲接济一个然后与兄弟合并。
一检查到大家都很小,那就紧凑一下,合并过日子。
- B-树的操作总结
- B-树的操作
- B树和B+树的总结
- B树的基本操作
- B树的删除操作
- B-树的基本操作 .
- B-树的基本操作
- B-树的基本操作
- B 树的删除操作
- B 、B-、B+树总结
- B树B+树的原理和操作
- B树B+树的原理和操作
- B树的一些总结(另外还有B+数B-树B*树)
- B树的插入、删除操作
- B树的插入、删除操作
- B+树的插入及删除操作
- 【项目3 - B-树的基本操作】
- 项目3 - B-树的基本操作
- H5选择器
- 【.Net码农】【PropertyInfo】C# list导出Excel
- [LeetCode]Same Tree
- AOJ.592 神奇的叶子
- Linux开发工具之工程管理器make
- B-树的操作总结
- iOS10 权限问题
- UVA 12563 Jin Ge Jin Qu hao 在有约束条件下的DP,结构体作为基本单位
- 【NOI导刊】【归并排序求逆序对】最接近神的人
- Codeforces Round #379 (Div. 2) C. Anton and Making Potions//734C
- 捋一捋 Activity 的启动流程 以及 界面的初始化过程
- Ubuntu 16.04 安装 JDK 和 Open Jdk
- MYSQL常用命令
- makefile语法