B树是一种平衡的多路查找树,一棵m阶B树或为空树,或满足下列特性:

1、  每个节点之多有m棵子树

2、  若根节点不是叶子节点,则至少有两颗子树

3、  除根之外所有非终端节点至少有[m/2]可子树([]是上取整)

4、  所有非终端节点中包含下列信息数据:(n,A0,K1,A1,K2,A2,….,Kn,An),其中n为关键码数目,ki均为关键码,Ai为指向子树的指针,Ai中的所有关键码均在区间[ki,ki+1]中。

5、  所有终端节点均在同一层次,可将终端节点的的下一层成为叶子节点或失败节点,查找到叶子节点意味着查找失败

对于m阶B树

简单口诀:插入时,多了就分;删除时,不够就借,借不到就合

解释:插入时,当一个节点的关键码数目等于m时则分裂,选取中间的关键码上升为父节点中的一个关键码,其余的左右两侧分别作为其左右子树,由于父节点关键码数目增加,若有需要向上递归解决;

注意:新插入的关键码必然是从叶子节点开始,分裂也是从叶子节点开始

删除一个关键码,有两种情形:

情形一:关键码所在节点不是叶子节点,找到关键码的后继节点x来替换,x必然属于叶子节点,现在问题成了删除叶子节点x了,参考情形二。

情形二:待删除的关键码x属于叶子节点,若x是根节点,直接删除;x不是根节点,当关键码数量n大于[m/2]-1,直接删除; 若n等于[m/2]-1,则向左右兄弟借,如果左右兄弟的关键码数目有一个大于[m/2]-1,则借其一个;如果左右兄弟的关键码数目均等于[m/2]-1, 选择一个合并,父节点中的一个关键码也下降到合并节点中了,此时父节点关键码数目减少,递归解决;

性能分析:令 a=[m/2], 高度为h的B树最少节点数目为

1 + 2* { (a-1) + (a-1)a + (a-1)a^2 + …(a-1)a^(h-2) } = 2a^(h-1) -1 = 2[m/2]^(h-1)

最多节点数目为 (m-1) + (m-1)*m +(m-1)*m^1 + … + (m-1)*m^(h-1) =  m^h -1;

查找复杂即为其高度大约为 以a为底n的对数,n为节点数目,按照最大高度计算;

B+树,与B树不同之处:

(1)       所有关键码都存放在叶子节点

(2)       有n棵子树的节点有n个关键码

(3)       上层的关键码复写到对应子树,作为最大(最小)关键码

其他不同之处:

B+树有两个头指针,一个纸箱B+树的根节点,一个指向关键码最小的叶节点,因此在B+树上可以进行树搜索和顺序搜索,在树搜索过程中,如果非叶节点上的关键码等于给定值,搜索并不定制,而是继续沿右指针向下一直到叶节点上的关键码;

B+树插入和删除只在叶节点进行,合并和分裂与B树相同,注意更新关键码,删除时上层副本可以保留作为“分界关键码”

B树总结的更多相关文章

  1. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  2. ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单

    前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...

  3. 再讲IQueryable<T>,揭开表达式树的神秘面纱

    接上篇<先说IEnumerable,我们每天用的foreach你真的懂它吗?> 最近园子里定制自己的orm那是一个风生水起,感觉不整个自己的orm都不好意思继续混博客园了(开个玩笑).那么 ...

  4. HDU1671——前缀树的一点感触

    题目http://acm.hdu.edu.cn/showproblem.php?pid=1671 题目本身不难,一棵前缀树OK,但是前两次提交都没有成功. 第一次Memory Limit Exceed ...

  5. 算法与数据结构(十一) 平衡二叉树(AVL树)

    今天的博客是在上一篇博客的基础上进行的延伸.上一篇博客我们主要聊了二叉排序树,详情请戳<二叉排序树的查找.插入与删除>.本篇博客我们就在二叉排序树的基础上来聊聊平衡二叉树,也叫AVL树,A ...

  6. [C#] C# 知识回顾 - 表达式树 Expression Trees

    C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...

  7. bzoj3207--Hash+主席树

    题目大意: 给定一个n个数的序列和m个询问(n,m<=100000)和k,每个询问包含k+2个数字:l,r,b[1],b[2]...b[k],要求输出b[1]~b[k]在[l,r]中是否出现. ...

  8. bzoj1901--树状数组套主席树

    树状数组套主席树模板题... 题目大意: 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[ ...

  9. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  10. jquery-treegrid树状表格的使用(.Net平台)

    上一篇介绍了DataTable,这一篇在DT的基础之上再使用jquery的一款插件:treegrid,官网地址:http://maxazan.github.io/jquery-treegrid/ 一. ...

随机推荐

  1. crontab 在unix 没有执行。

    Quote: 引用 2 楼 jdwq33 的回复: Quote: 引用 1 楼 mp777323 的回复: 03 * * * * sh /opt/pro_some.sh 我试过了,这样也不行,难道是我 ...

  2. 181. 将整数A转换为B

    181. 将整数A转换为B 如果要将整数A转换为B,需要改变多少个bit位? 注意事项 Both n and m are 32-bit integers. 您在真实的面试中是否遇到过这个题? Yes ...

  3. 利用apache限制IP并发数和下载流量控制

    一,为什么要对IP并发数,下载流量进行控制 说正题之前,先给大家讲个故事,那是在2007年,我进了一家公司,当时我们正在给达芙妮做电子商务网,www.idaphne.com.从三月份开始做的吧,九月份 ...

  4. 如何写一个跨浏览器的事件处理程序 js

    如何 写一个合格的事件处理程序,看如下代码: EventUtil可以直接拿去用 不谢 <!DOCTYPE html> <html> <head> <title ...

  5. JSP新闻发布系统

    1.主页面 1.1登录 1.2    分页 2.注销 3.代码如下 package cn.news.dao.impl; import java.sql.SQLException; import org ...

  6. I/O————数据流

    如何将一个long类型的数据写入文件中? 转字符串 → 通过 getbytes() 写进去,费劲,而且在此过程中 long 类型的数需要不断地转换. 现在,Java 中的数据流能够很好的解决这个问题( ...

  7. Fragment 创建及替换

    1.Fragment的产生与介绍 Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视.针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应 ...

  8. 总结SQL Server窗口函数的简单使用

    总结SQL Server窗口函数的简单使用 前言:我一直十分喜欢使用SQL Server2005/2008的窗口函数,排名函数ROW_NUMBER()尤甚.今天晚上我在查看SQL Server开发的相 ...

  9. spring_boot入门

    核心: 控制反转(Inversion of Control-IOC)和依赖注入(Dependency Injection-DI) Spring中两者是相同的, 控制反转是用依赖注入实现的. 这里, 依 ...

  10. Freemarker入门小案例(生成静态网页的其中一种方式)

    其实生成静态网页的方式有好多种,我昨天看了一下,Freemarker是其中一种,但是Freemarker现在我们都用得比较少了,现在用得ActiveMQ用来发送信息到静态页面,不过想了一下这个小东西, ...