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. Javascript | 分别用async await异步方法和Promise来实现一个简易的求职程序

      关注公众号,一起交流,微信搜一搜: LiOnTalKING   JavaScript Promise Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务 ...

  2. [0x12] 135.最大子序和【单调队列】

    我在知乎上看到一句话,如一道晴天霹雳: "如果一个选手比你小还比你强,你就可以退役了."--单调队列的原理 题意 link(more:P1714) 给定一个长度为 \(n\) 的整 ...

  3. 关系数据库——MySQL

    数据库 1.基本操作 1.1命令行操作 mysql -u username -p+password; --连接数据库 flush privileges; --刷新权限 show databases; ...

  4. [Leetcode]移除链表元素

    题目 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * Li ...

  5. 8. 字符串转整数 (atoi)

    题目 代码 class Solution { public: int myAtoi(string str) { int res=0,sign=1; int i=str.find_first_not_o ...

  6. 网络安全之frp内网穿透

    前言 内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机 环境需求 一台公网服务器(linux操作系统) ...

  7. antd 3.x升4.x踩坑之路~

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 兼容性问题 第三方依赖兼容问题 React - 最低 v16.9,部 ...

  8. Spring Boot + WebSocket 实时监控异常

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  9. 深度复盘-重启 etcd 引发的异常

    作者信息: 唐聪.王超凡,腾讯云原生产品中心技术专家,负责腾讯云大规模 TKE 集群和 etcd 控制面稳定性.性能和成本优化工作. 王子勇,腾讯云专家级工程师, 腾讯云计算产品技术服务专家团队负责人 ...

  10. JAVA虚拟机02---JAVA虚拟机运行时数据区域简介

      JAVA虚拟机运行时数据区域 1.程序计数器 1)它可以看做是当前线程执行的字节代码的行指示器,通过改变计数器的值来决定下一步执行的代码 2)它是线程私有的,每个线程都有自己的程序计数器(JAVA ...