B树和B-树(平衡多路查找树)
规则:
1、排序方法:所有结点关键字按递增次序,并遵循左小右大的原则。
2、子结点数:非叶子结点的子结点数>1且<=M且M>=2,空树除外(M阶代表一个树的结点最多有M路查找路径)
3、关键字数:中间结点关键字数量大于等于ceil(M/2)-1且小于等于M-1个
4、所有叶子结点均在同一层,叶子结点除了包含了关键字和关键字记录的指针外,也有指向其叶子结点的指针,只不过指针地址都是NULL.
特点:B树相对于平衡二叉树不同是每个结点包含的关键字增多了,特别是这B树应用到数据库中的时候,充分的利用了磁盘块的原理(磁盘块数据存储是采用块的形式存储的,每次IO读取时,同一磁盘的数据可以一次读出)把结点大小限制和充分使用在磁盘块的大小范围内,把树的结点关键字增多后,树的层级比原来的二叉树少了,减少数据查找的次数和复杂度。

B+树
B+树是B树的一个升级版,相对于B树来说,B+树更充分利用了结点的空间,让查询速度稳定,其速度完全接近于二分查找。
规则:
1、B+树和B树不同,B+树的非叶子结点不保存关键字记录指针,只进行数据索引,这样使得B+树每个结点可以保存的关键字大大增加
2、 B+树的叶子结点保存了父节点的所有关键字记录的指针,所有数据地址必须要到叶子结点才能获取到,所以每次查询的次数都是一致的
3、B+树叶子结点的关键字从小到大有序排列,左边结尾数据都会保存右边结点开始数据的指针
4、非叶子结点的子结点数=关键字数(根据多种资料,这里有两种算法的实现方法,另一种为非叶子结点的关键字数=子结点数-1)
特点:
1、B+树的层级更少,相较于B树,B+树每个非叶子结点存储的关键字数更多,树的层级更少,所以查询数据速度更快
2、B+树查询速度更稳定,B+树所有关键字数据都存在叶子结点上,所以每次查找速度比B树更加稳定

B*树
B*树是B+树的变种
规则:
1、关键字个数限制,B+树初始化个数为cei(m/2)B*树初始化个数为cei(2/3)
2、B+树结点满了时候就会分裂,而B*树会检查兄弟结点是否为满(因为每个结点都有指向兄弟的指针),如果兄弟未满则向兄弟转移关键字,如果兄弟已满,则从当前节点和兄弟结点各拿出1/3数据来创建一个新的结点
特点:
在B+树的基础上因初始化容量变大,使得结点空间利用率变高,而又存有兄弟结点转移关键字的特性,使得B*树的分解次数变少。
3、B+树天然具备排序功能,B+树的叶子结点构成了一个有序的链表,在查询大小区间的数据时候更方便,数据紧密性更高,缓存命中率也很高。
4、B+树全结点遍历更快,B+树遍历整棵树只要遍历所有叶子结点就可以了,不需要像B树一样需要遍历每一层,有利于数据库做全表扫描

B树,B-树,B+树和B*树的更多相关文章

  1. 【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings

    谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...

  2. jquery: json树组数据输出到表格Dom树的处理方法

    项目背景 项目中需要把表格重排显示 处理方法 思路主要是用历遍Json数组把json数据一个个append到5个表格里,还要给每个单元格绑定个单击弹出自定义对话框,表格分了单双行,第一行最后还要改ro ...

  3. 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

    http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...

  4. Qtree3题解(树链剖分(伪)+线段树+set)

    外话:最近洛谷加了好多好题啊...原题入口 这题好像是SPOJ的题,挺不错的.看没有题解还是来一篇... 题意: 很明显吧.. 题解: 我的做法十分的暴力:树链剖分(伪)+线段树+\(set\)... ...

  5. 「ZJOI2017」树状数组(二维线段树)

    「ZJOI2017」树状数组(二维线段树) 吉老师的题目真是难想... 代码中求的是 \(\sum_{i=l-1}^{r-1}a_i\),而实际求的是 \(\sum_{i=l}^{r}a_i\),所以 ...

  6. 敌兵布阵 HDU - 1166 (树状数组模板题,线段树模板题)

    思路:就是树状数组的模板题,利用的就是单点更新和区间求和是树状数组的强项时间复杂度为m*log(n) 没想到自己以前把这道题当线段树的单点更新刷了. 树状数组: #include<iostrea ...

  7. BZOJ4860 BJOI2017 树的难题 点分治、线段树合并

    传送门 只会线段树……关于单调队列的解法可以去看“重建计划”一题. 看到路径长度$\in [L,R]$考虑点分治.可以知道,在当前分治中心向其他点的路径中,始边(也就是分治中心到对应子树的根的那一条边 ...

  8. 树的最长链-POJ 1985 树的直径(最长链)+牛客小白月赛6-桃花

    求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简 ...

  9. BZOJ2141排队——树状数组套权值线段树(带修改的主席树)

    题目描述 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备吃果果.不过因为小朋友们的身高有所区别 ...

  10. luogu3380/bzoj3196 二逼平衡树 (树状数组套权值线段树)

    带修改区间K大值 这题有很多做法,我的做法是树状数组套权值线段树,修改查询的时候都是按着树状数组的规则找出那log(n)个线段树根,然后一起往下做 时空都是$O(nlog^2n)$的(如果离散化了的话 ...

随机推荐

  1. jQuery事件与动态效果

    目录 一:阻止后续事件执行 1.推荐使用阻止事件 2.未使用 阻止后续事件执行 3.使用阻止后续事件执行 二:阻止事件冒泡 1.什么是事件冒泡? 2.未阻止事件冒泡 3.阻止事件冒泡 4.2.阻止冒泡 ...

  2. 基于容器的PaaS混合云的几种形式

    概述 这是 Gartner 的一个图,提供了全球的基于容器的 PaaS 公有云.混合云服务的梳理展示: 这里提供一个其他的视角: 中国市场,基于容器的 PaaS 混合云(公有云 + 私有云)的相关厂商 ...

  3. 浅谈promise对象

    背景: 最近项目在做小程序的开发,涉及设计一个统一的登录公共方法,当实现时涉及到多个异步请求,那么问题来了,如何让多个异步请求先后同步进行呢?很多人会想到使用多层嵌套套来实现,就像这样: functi ...

  4. 01.Java面试都问啥?

    大家好,我是王有志.好久不见,不过这次没有休假,而是搞了个"大"工程,花了点时间自学Python,然后写了"玩具爬虫",爬某准网的面经数据,为来年的" ...

  5. latex文档的中文字体设置

    Latex文档的中文字体设置 近日在用latex写论文时遇到了中文字体设置的问题.具体问题如下,正文字体为宋体,摘要和关键词字体为仿宋.作为latex云玩家,我马上百度了中文字体的设置方法.搜索到了如 ...

  6. 第一个C程序

    写C代码 创建工作区 创建工程 创建文件(.c源文件..h头文件) main函数是程序执行的入口,有且只有一个 函数printf(print function打印函数)[库函数-C语言本身提供给我们使 ...

  7. 递归概念&分类&注意事项

    递归概念&分类&注意事项 概念 递归:指在当前方法内调用自己的这种现象. 递归的分类:.递归分为两种,直接递归和间接递归..直接递归称为方法自身调用自己..间接递归可以A方法调用B方法 ...

  8. Java入门与进阶P-5.7+P-5.8

    素数 去掉偶数后,从3到x-1 每次加2 ·如果×是偶数,立刻 ·否则要循环(n-3)/2+1遍 ·当n很大时就是n/2遍 构造素数表 欲构造n以内的素数表 1. 令x为2 2. 将2x/ 3x. 4 ...

  9. Java语言的跨平台性-JDK,JRE和JVM

    Java语言的跨平台性 1 Java虚拟机--JVM JVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的 运行环境, ...

  10. CAN2-CH32V307CAN2使用说明与CAN波特率计算方法

    一.修改引脚 CH32V307CAN2的TX为PB13,RX为PB12 注意用CAN2时需要初始化CAN1的时钟. 二.配置CAN2过滤器开始的组(组号与图24-4相对应) 三.将FIFO0改为FIF ...