D&F学数据结构系列——B树(B-树和B+树)介绍
B树
定义:一棵B树T是具有如下性质的有根树:
1)每个节点X有以下域:
a)n[x],当前存储在X节点中的关键字数,
b)n[x]个关键字本身,以非降序存放,因此key1[x]<=key2[x]<=...<=keyn[x][x],
c)leaf[x],是一个布尔值,如果x是叶子的话,则它为TRUE,如果x为一个内节点,则为FALSE。
2)每个内节点包含n[x]+1个指向其子女的指针c1[x],c2[x],...,cn[x]+1[x]。叶节点没有子女,故它们的ci域无意义。
3)各关键字keyi[x]对存储在各子树中的关键字范围加以分隔:如果ki为存储在以以ci[x]为根的子树中的关键字,则
ki<=key1[x]<=k2<=key2[x]<=...<=keyn[x]<=keyn[x]+1
4)每个叶结点具有相同的深度,即树高h。
5)每一个结点能包含的关键字树有一个上界和下界。这些界可以用一个称作B树的最小度数的固定值t>=2表示。
a)每个非根的结点必须至少有t-1个关键字。每个非根的内结点至少有t个子女。如果树是非空的,则根结点至少包含一个关键字。
b)每个结点可包含最多2t-1个关键字,所以一个内结点至多可以有2t个子女。我们说一个结点是满的,如果它恰好有2t-1个关键字。
t=2时B树是最简单的。这时每个内结点有2个、3个或4个子女,亦即一棵2-3-4树。然而在实际中,通常采用很大的t。

用途:
B树是为磁盘或其它辅助存储设备而设计的一种多路平衡查找树。
为什么针对磁盘设计的数据结构不同于这对随机存储器设计的数据结构?

B树以自然的方式推广二叉查找树。如果B树的内结点X包含n[x]个关键字,则x就有n[x]+1个子女。结点X中的关键字是用来将X所处理的关键字域划分成n[x]+1个子域的分隔点,每个子域都有X中的一个子女来处理。当在一棵B树中查找某个关键字时,通过对存储在结点X中的n[x]个关键字的比较,而做出一个n[x]+1路的决定。叶节点的结构不同于内部结点的结构。
在一个典型的B树的应用中,要处理的数据量很大,因此无法一次都装入主存。B树算法将所需的页(“页”这个概念需要计算机组成原理和操作系统的知识)选择出来复制到主存中去,而后将修改过的页再写回到磁盘中去。因为在任何时刻,B树算法在主存中都只需要一定量的页数,故主存的大小并不限制可被处理的B树的大小。在B树中,一个结点的大小通常相当于一个完整的磁盘页。

对存储在磁盘上的一棵大的B树,通常采用的分支因子为50到2000,具体要取决于关键字相对于一页的大小 。选取一个大的分支因子,可以大大降低数的高度,以及寻找任意关键字时所需的磁盘存取次数。上图显示了一棵分支因子为1001、高度为2的B树,它可以存储超过10亿个关键字;尽管如此,根节点还是可以持久的保留在内存中,在这棵树中寻找某一关键字至多需两次磁盘存取!
维基百科:B树
D&F学数据结构系列——B树(B-树和B+树)介绍的更多相关文章
- D&F学数据结构系列——AVL树(平衡二叉树)
AVL树(带有平衡条件的二叉查找树) 定义:一棵AVL树是其每个节点的左子树和右子树的高度最多差1的二叉查找树. 为什么要使用AVL树(即为什么要给二叉查找树增加平衡条件),已经在我之前的博文中说到过 ...
- D&F学数据结构系列——二叉排序树
二叉排序树(Binary Sort Tree) 定义:对于树中的每个结点X,它的左子树中所有关键字值小于X的关键字值,而它的右子树中所有关键字值大于X的关键字值. 二叉查找树声明: #ifndef _ ...
- D&F学数据结构系列——二叉堆
二叉堆(binary heap) 二叉堆数据结构是一种数组对象,它可以被视为一棵完全二叉树.同二叉查找树一样,堆也有两个性质,即结构性和堆序性.对于数组中任意位置i上的元素,其左儿子在位置2i上,右儿 ...
- D&F学数据结构系列——红黑树
红黑树 定义:一棵二叉查找树如果满足下面的红黑性质,则为一棵红黑树: 1)每个结点不是红的就是黑的 2)根结点是黑的 3)每个叶结点是黑的 4)如果一个结点是红的,它的两个儿子都是黑的(即不可能有两个 ...
- D&F学数据结构系列——前驱和后继
前驱和后继 本文所述为二叉排序树的前驱和后继,如果想了解二叉排序树的概念,可以参考我的博文http://www.cnblogs.com/sage-blog/p/3864640.html 给定一个二叉查 ...
- D&F学数据结构系列——插入排序
插入排序(insertion sort) 插入排序由P-1趟(pass)排序组成.对于P=1趟到P=N-1趟,插入排序保证从位置0到位置P-1上的元素为已排序状态.插入排序利用了这样的事实:位置0到位 ...
- 重学数据结构系列之——平衡树之SB Tree(Size Blanced Tree)
学习来源:计蒜客 平衡树 1.定义 对于每一个结点.左右两个子树的高度差的绝对值不超过1,或者叫深度差不超过1 为什么会出现这样一种树呢? 假如我们依照1-n的顺序插入到二叉排序树中,那么二叉排序树就 ...
- MSDN Webcast 跟我一起从零开始学WCF系列课程
系列课程 >跟我一起从零开始学WCF系列课程 跟我一起从零开始学WCF系列课程(1):WCF概述 (Level 200) 讲 师:徐长龙 课程简介:从 本堂课开始我们将开启一个新的 ...
- 一步一步学数据结构之1--n(通用树)
今天来看大家介绍树,树是一种非线性的数据结构,树是由n个结点组成的有限集合,如果n=0,称为空树:如果n>0,则:有一个特定的称之为根的结点,它只有直接后继,但没有直接前驱:除根以外的其他结点划 ...
随机推荐
- ETL之增量抽取方式
1.触发器方式 触发器方式是普遍采取的一种增量抽取机制.该方式是根据抽取要求,在要被抽取的源表上建立插入.修改.删除3个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个增量日志表 ...
- MongoDB分片简单实例
分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据也足以提供可接受的读写吞吐量.这时,我 ...
- Helloworld模块之内核makefile详解
Hello World 模块以及对应的内核makefile详解 hello.c: #include <linux/module.h> //所有模块都需要的头文件 #include < ...
- C#之玩转反射【转:http://www.cnblogs.com/yaozhenfa/p/CSharp_Reflection_1.html】
前言 之所以要写这篇关于C#反射的随笔,起因有两个: 第一个是自己开发的网站需要用到 其次就是没看到这方面比较好的文章. 所以下定决心自己写一篇,废话不多说开始进入正题. 前期准备 在VS20 ...
- HTML/CSS的学习过程一览
HTML/CSS的学习过程一览 说明 调试工具使用的是Google Chrome浏览器,其余浏览器出现的问题,这锅我不背[傲娇脸 可以使用浏览器查看源代码 网页列表 HTML_CSS_1 HTML基本 ...
- [shell基础]——split命令
测试文本 # cat name1.txt name1 alvin1 name2 alvin2 name3 alvin3 name4 alvin4 此时目录下就只有这个文件 # ls name1.txt ...
- B-tree/B+tree/B*tree [转]
(原文出处:http://blog.csdn.net/hbhhww/article/details/8206846) B~树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tr ...
- 软件工程实践小队Scrum Meeting
例会记录 时间:2013年10月20日星期日 Part 1 会议要点: 1. 小组讨论PM.Dev.Test的各自特点: 2. 小组讨论我们的项目网上教学问答系统的相关问题: 3.确定小组成员在第一轮 ...
- 【每日scrum】NO.5
尝试采用自己的地图,绘点并计算路径,但是地图打开出现问题.
- android activity之间传递返回值
activity A,跳转至 Activity B ,A传参数user_name给B,然后B再返回修改后的参数user_name给A 首先A传user_name给B Intent input_B = ...