B树的生成
B树的生成
flyfish 2015-7-19
从空树開始构建一棵B树 逐个插入keyword
规则:
除根结点之外的全部非终端结点至少有⌈m/2⌉棵子树,所以keyword的个数必须 n为keyword个数
⌈m/2⌉-1⩽n。
依照A0,K1,A1。K2,A2,…,Kn,An
也就是指针个数比keyword个数多一个
由于树中每一个结点至多有m 棵子树。所以该结点的keyword个数不能超过m-1
也就是,keyword个数的阈值 ⌈m/2⌉−1⩽n⩽m−1
每次插入一个keyword不是在树中加入一个叶子结点,由于这样不再是有效的B树而是首先在最低层的某个非终端结点中加入一个keyword,若该结点的keyword个数不超过m-1,则插入完毕,否则要产生结点的“分裂”
绿色:keyword个数
红色:指针
蓝色:keyword
构建Degree为3keyword从1到7的B树
普通情况下,结点可例如以下实现分裂 引用自严蔚敏《数据结构》
如果*p结点中已有m-1个keyword。当插入一个keyword之后。结点中含有信息为:
(m。A0,(K1。A1)。…。(Km,Am)
且当中 Ki<Ki+1 , 1⩽i< m
此时可将*P节点分裂为*P和*P’两个结点,
*p结点中含有信息
⌈m/2⌉-1。A0,(K1,A1),…,(K⌈m/2⌉−1。A⌈m/2⌉−1)
*p’结点中含有信息
m-⌈m/2⌉,A⌈m/2⌉。(K⌈m/2⌉+1,A⌈m/2⌉+1 ),… ,(Km。Am)
而keywordK⌈m/2⌉和指针*p’一起插入到*p的双亲结点中.
简化理解
m为B树的阶,n为节点的个数
若在一个包括n<m−1个keyword的结点中插入一个新的keyword,则把新的keyword直接插入该结点就可以。
但若把一个新的keyword插入到包括m-1个keyword的结点中,则将引起结点的分裂。
生成一新结点,把原结点上的keywordK按升序排序,也就是 Ki<Ki+1 。
满足:左边的小于中间的keyword;右边的大于中间的keyword,从中间位置把keyword(不包括中间位置的keyword)分成两部分。
左部分所含keyword放在旧结点中。右部分所含keyword放在新结点中,中间位置的keyword连同新结点的存储位置(指向新节点的指针)插入到双亲结点中。
如果双亲结点的keyword个数也超过m-1,则要再分裂,再往上插入,此时B树可能朝着根的方向生长。
B树的生成的更多相关文章
- WebForm页面生命周期WEBFORM_ASPNET控件树的生成和作用
WebForm页面生命周期WEBFORM_ASPNET控件树的生成和作用 摘要 页面类是如何结合后台文件类生成整个页面的HTML的代码和后台输出的代码输出到浏览器中呢?这就牵扯到Asp.net页面生命 ...
- JSP编译成Servlet(一)语法树的生成——语法解析
一般来说,语句按一定规则进行推导后会形成一个语法树,这种树状结构有利于对语句结构层次的描述.同样Jasper对JSP语法解析后也会生成一棵树,这棵树各个节点包含了不同的信息,但对于JSP来说解析后的语 ...
- Asp.net页面生命周期详解任我行(2)-WebForm页面生命周期WEBFORM_ASPNET控件树的生成和作用
摘要 页面类是如何结合后台文件类生成整个页面的HTML的代码和后台输出的代码输出到浏览器中呢?这就牵扯到Asp.net页面生命周期中一个很重要的概念控件树.服务器以反射的方式创建了页面类对象 内容 我 ...
- C#3.0新增功能10 表达式树 06 生成表达式
连载目录 [已更新最新开发文章,点击查看详细] 到目前为止,你所看到的所有表达式树都是由 C# 编译器创建的. 你所要做的是创建一个 lambda 表达式,将其分配给一个类型为 Expressi ...
- [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析
[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285 ...
- 用dTree组件生成无限级导航树
在做管理系统时不可避免要用到导航树,这种东西只要一次做好,就可以随处运行,目前比较好的组件是dTree,原则上可以达到无限级,当然实际运行中4,5级就已经很多了,dTree的速度还是不错的,而且是J ...
- vue中组件之间的相互调用,及通用后台管理系统左侧菜单树的迭代生成
由于本人近期开始学习使用vue搭建一个后端管理系统的前端项目,在左侧生成菜单树的时候遇到了一些问题.在这里记录下 分析:由于本人设定的菜单可以使多级结构,直接使用vue的v-for 遍历并不是很方便. ...
- [WebKit内核] JavaScriptCore深度解析--基础篇(一)字节码生成及语法树的构建
看到HorkeyChen写的文章<[WebKit] JavaScriptCore解析--基础篇(三)从脚本代码到JIT编译的代码实现>,写的很好,深受启发.想补充一些Horkey没有写到的 ...
- [.net 面向对象程序设计进阶] (6) Lamda表达式(二) 表达式树快速入门
[.net 面向对象程序设计进阶] (6) Lamda表达式(二) 表达式树快速入门 本节导读: 认识表达式树(Expression Tree),学习使用Lambda创建表达式树,解析表达式树. 学习 ...
随机推荐
- Xcode中断点的使用
注:本文由破船译自:albertopasca.本文由HoNooD在iosfeed站点上做了推荐. 这里先推荐两篇Xcode相关的文章: Xcode Code Snippets iOS调试 — 基本技巧 ...
- hdu5852 Intersection is not allowed! 【矩阵行列式】
题意 给出\(n*n\)网格\((n<=10^5)\) 顶部有\(K\)个起点,底部有\(K\)个相对应的终点 每次只能向下或向右走 求有多少种从各个起点出发到达对应终点且路径不相交的路径? 对 ...
- 刷题总结——树有几多愁(51nod1673 虚树+状压dp+贪心)
题目: lyk有一棵树,它想给这棵树重标号. 重标号后,这棵树的所有叶子节点的值为它到根的路径上的编号最小的点的编号. 这棵树的烦恼值为所有叶子节点的值的乘积. lyk想让这棵树的烦恼值最大,你只需输 ...
- Eclipse + Jersey 发布RESTful WebService(一)了解Maven和Jersey,创建一个WS项目(成功!)
一.下文中需要的资源地址汇总 Maven Apache Maven网站 http://maven.apache.org/ Maven下载地址: http://maven.apache.org/down ...
- vue-cli3 vue.config.js配置
module.exports = { // 基本路径 baseUrl: '', // 输出文件目录 outputDir: 'dist', // eslint-loader 是否在保存的时候检查 lin ...
- 关于sass和less做自适应网页的区别
less 可以这么写 @r: 15rem; body{margin-top:40/@r}; 但是sass这么写会报错 sass应该这么写 $r: 15; body{margin-top:40re ...
- Linux命令文件查看过滤
Linux命令篇 1.查看一个文件的后100行的命令: tail -n 100 Linux下查看文件前几行一般用head -n xx,查看后面几行用tail -n xx.除此之外,还有: tail - ...
- inline关键词的使用(转载)
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int ...
- js-键盘回车搜索enter
这个问题需求在移动版上经常用到. <div class="sousuo"> <input type="text" placeho ...
- E. Sergey and Subway
比赛时候写复杂了…… 我写的是 计算每个节点树内所有点到某个点的距离和. #include <bits/stdc++.h> using namespace std; typedef lon ...