红黑树 B-树 B+树 数据库索引

红黑树, 是一颗有特殊性质的二叉查找树,

节点,要么红要么黑

根节点是黑的

叶节点是黑的

如果一个节点是红的,那么它的两个儿子是黑的

对任意节点而言,其道叶节点树尾端NIL指针的每条路径都包含相同数据的黑节点

在插入或删除节点时,可能会改变红黑树的性质,需要调整使得继续保持性质,常用的操作为左旋和右旋

红黑树的左旋和右旋:

左旋pivot:

以pivot-Y为轴,Y称为新的根节点,Y的左子树称为pivot的右子树

右旋pivot:

以pivot-Y为轴,Y称为新根,pivot为Y的新右子树

B-树(B树)

用阶定义的B树

B 树又叫平衡多路查找树。一棵m阶的B 树 (注:切勿简单的认为一棵m阶的B树是m叉树,虽然存在四叉树八叉树KD树,及vp/R树/R*树/R+树/X树/M树/线段树/希尔伯特R树/优先R树等空间划分树,但与B树完全不等同)的特性如下:

树中每个结点最多含有m个孩子(m>=2);

除根结点和叶子结点外,其它每个结点至少有[ceil(m / 2)]个孩子(其中ceil(x)是一个取上限的函数);

若根结点不是叶子结点,则至少有2个孩子(特殊情况:没有孩子的根结点,即根结点为叶子结点,整棵树只有一个根节点);

所有叶子结点都出现在同一层,叶子结点不包含任何关键字信息(可以看做是外部接点或查询失败的接点,实际上这些结点不存在,指向这些结点的指针都为null);(读者反馈@冷岳:这里有错,叶子节点只是没有孩子和指向孩子的指针,这些节点也存在,也有元素。@研究者July:其实,关键是把什么当做叶子结点,因为如红黑树中,每一个NULL指针即当做叶子结点,只是没画出来而已)。

每个非终端结点中包含有n个关键字信息: (n,P0,K1,P1,K2,P2,......,Kn,Pn)。其中:
       a)   Ki
(i=1...n)为关键字,且关键字按顺序升序排序K(i-1)< Ki。 
       b)  
Pi为指向子树根的接点,且指针P(i-1)指向子树种所有结点的关键字均小于Ki,但都大于K(i-1)。 
       c)   关键字的个数n必须满足: [ceil(m /
2)-1]<= n <= m-1。

B+树:B树的一个变种

m阶B+树与B树的异同:

n颗子树的节点中含有n-1个关键字

所有的关键字信息都在叶子节点上

非终端节点可以看成是索引

叶子节点从小到大顺序链接

为什么B+树比B树更适合作为操作系统中文件索引和数据库索引:

1.B+树的磁盘读写代价更低

内部节点更小,在相同的盘块中,可以存放的内部节点更多,一次性读入内存中的需要查找的关键字也越多。

B树的每个节点都是以key_address的形式存储的,而B+树的非叶子节点只需要存储key,address信息可以放在叶子节点上。所以在搜索的时候,一次读入的数据块能包含更多的节点,提高检索效率

2.查询效率更稳定

每次查询都需要从根节点到叶子节点

3.叶子节点从左到右链接,根据局部性原理,方便加载左右数据

时间: 2024-10-29 08:31:35

红黑树 B-树 B+树 数据库索引的相关文章

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

http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(B

二叉树,平衡树,红黑树,B~/B+树汇总

二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree).这四种树都具备下面几个优势: (1) 都是动态结构.在删除,插入操作的时候,都不需要彻底重建原始的索引树.最多就是执行一定量的旋转,变色操作来有限的改变树的形态.而这些操作所付出的代价都远远小于重建一棵树.这一优势在<查找结构专题(1):静态查找结构概论 >中讲到过. (2) 查找的时间复杂度大体维持在O(log(N))数量级上.可能有些结构在最差的情况下效率将会下降很快,比如二叉树 1.二叉查找树

查找(二):彻底理解红黑树和平衡查找树

平衡查找树 在之前的二分搜索和二叉查找树中已经能够很好地解决查找的问题了,但是它们在最坏情况下的性能还是很糟糕,我们可以在查找二叉树中,每次动态插入或删除某结点时,都重新构造为完全二叉树,但是这样代价太大,所以就引出了平衡查找树. 详细的数学定义就不给出了,因为既不直观也记不住,直接给出一个平衡二叉树的图: 相信这个图一看就明白了,平衡查找树(以下简称BST或2-3查找树),下面给出一些基本的定义: 一棵2-3查找树或为一棵空树,或由一下结点组成: 2-结点,含有一个键(及其对应的值)和两条链接

B+树在mysql数据库索引中的使用

一:B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树. ⑵若根结点不是叶子结点,则至少有两棵子树. ⑶除根结点之外的所有非叶结点至少有[m/2] 棵子树: ⑷所有的非终端结点中包含以下信息数据:(n,A0,K1,A1,K2,-,Kn,An) 其中:n 为关键码的个数,Ki(i=1,2,-,n)为关键码且Ki<Ki+1,Ai 为指向子树根结点的指针(i=0,1,-,n),且指针Ai-1 所指子树

B树、B+树、红黑树、AVL树比较

B树是为了提高磁盘或外部存储设备查找效率而产生的一种多路平衡查找树. B+树为B树的变形结构,用于大多数数据库或文件系统的存储而设计. B树相对于红黑树的区别 在大规模数据存储的时候,红黑树往往出现由于树的深度过大而造成磁盘IO读写过于频繁,进而导致效率低下的情况.为什么会出现这样的情况,我们知道要获取磁盘上数据,必须先通过磁盘移动臂移动到数据所在的柱面,然后找到指定盘面,接着旋转盘面找到数据所在的磁道,最后对数据进行读写.磁盘IO代价主要花费在查找所需的柱面上,树的深度过大会造成磁盘IO频繁读

B-树和B+树的应用:数据搜索和数据库索引

B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树:⑵若根结点不是叶子结点,则至少有两棵子树: ⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树:⑷所有的非终端结点中包含以下信息数据: (n,A0,K1,A1,K2,-,Kn,An)其中:Ki(i=1,2,-,n)为关键码,且Ki<Ki+1,  Ai 为指向子树根结点的指针(i=0,1,-,n),且指针Ai-1 所指

转:基于B-树和B+树的使用:数据搜索和数据库索引的详细介绍

原文地址:http://www.jb51.net/article/36184.htm B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树:⑵若根结点不是叶子结点,则至少有两棵子树: ⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树:⑷所有的非终端结点中包含以下信息数据: (n,A0,K1,A1,K2,-,Kn,An)其中:Ki(i=1,2,-,n)为关键码,且Ki<

B-树&amp;&amp;B+树&amp;&amp;数据库索引(转)

文章来源 http://blog.csdn.net/hguisu/article/details/7786014 http://blog.sina.com.cn/s/blog_4e0c21cc01010gjo.html 一.B-树 它就是B树,不存在所谓的B减树,中间的横杠只是隔离符,即平衡多路搜索树,此处B是Balance的意思. B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树:⑵若根结点不

B树、B+树、红黑树、AVL树

定义及概念 B树 二叉树的深度较大,在查找时会造成I/O读写频繁,查询效率低下,所以引入了多叉树的结构,也就是B树.阶为M的B树具有以下性质: 1.根节点在不为叶子节点的情况下儿子数为 2 ~ M2.除根结点以外的非叶子结点的儿子数为 M/2(向上取整) ~ M3.拥有 K 个孩子的非叶子节点包含 k-1 个keys(关键字),且递增排列4.所有叶子结点在同一层,即深度相同 (叶节点可以看成是一种外部节点,不包含任何关键字信息) 在B-树中,每个结点中关键字从小到大排列,并且当该结点的孩子是非叶

B-树和B+树的应用:数据搜索和数据库索引【转】

B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树: ⑵若根结点不是叶子结点,则至少有两棵子树: ⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树: ⑷所有的非终端结点中包含以下信息数据: (n,A0,K1,A1,K2,-,Kn,An) 其中:Ki(i=1,2,-,n)为关键码,且Ki<Ki+1,  Ai 为指向子树根结点的指针(i=0,1,-,n),且指针Ai-