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+树)介绍的更多相关文章

  1. D&F学数据结构系列——AVL树(平衡二叉树)

    AVL树(带有平衡条件的二叉查找树) 定义:一棵AVL树是其每个节点的左子树和右子树的高度最多差1的二叉查找树. 为什么要使用AVL树(即为什么要给二叉查找树增加平衡条件),已经在我之前的博文中说到过 ...

  2. D&F学数据结构系列——二叉排序树

    二叉排序树(Binary Sort Tree) 定义:对于树中的每个结点X,它的左子树中所有关键字值小于X的关键字值,而它的右子树中所有关键字值大于X的关键字值. 二叉查找树声明: #ifndef _ ...

  3. D&F学数据结构系列——二叉堆

    二叉堆(binary heap) 二叉堆数据结构是一种数组对象,它可以被视为一棵完全二叉树.同二叉查找树一样,堆也有两个性质,即结构性和堆序性.对于数组中任意位置i上的元素,其左儿子在位置2i上,右儿 ...

  4. D&F学数据结构系列——红黑树

    红黑树 定义:一棵二叉查找树如果满足下面的红黑性质,则为一棵红黑树: 1)每个结点不是红的就是黑的 2)根结点是黑的 3)每个叶结点是黑的 4)如果一个结点是红的,它的两个儿子都是黑的(即不可能有两个 ...

  5. D&F学数据结构系列——前驱和后继

    前驱和后继 本文所述为二叉排序树的前驱和后继,如果想了解二叉排序树的概念,可以参考我的博文http://www.cnblogs.com/sage-blog/p/3864640.html 给定一个二叉查 ...

  6. D&F学数据结构系列——插入排序

    插入排序(insertion sort) 插入排序由P-1趟(pass)排序组成.对于P=1趟到P=N-1趟,插入排序保证从位置0到位置P-1上的元素为已排序状态.插入排序利用了这样的事实:位置0到位 ...

  7. 重学数据结构系列之——平衡树之SB Tree(Size Blanced Tree)

    学习来源:计蒜客 平衡树 1.定义 对于每一个结点.左右两个子树的高度差的绝对值不超过1,或者叫深度差不超过1 为什么会出现这样一种树呢? 假如我们依照1-n的顺序插入到二叉排序树中,那么二叉排序树就 ...

  8. MSDN Webcast 跟我一起从零开始学WCF系列课程

    系列课程 >跟我一起从零开始学WCF系列课程   跟我一起从零开始学WCF系列课程(1):WCF概述 (Level 200)   讲 师:徐长龙    课程简介:从 本堂课开始我们将开启一个新的 ...

  9. 一步一步学数据结构之1--n(通用树)

    今天来看大家介绍树,树是一种非线性的数据结构,树是由n个结点组成的有限集合,如果n=0,称为空树:如果n>0,则:有一个特定的称之为根的结点,它只有直接后继,但没有直接前驱:除根以外的其他结点划 ...

随机推荐

  1. golang:slice陷阱

    slice陷阱,slice底层指向某个array,在赋值后容易导致array长期被引用而无法释放

  2. iOS学习之UINavigationController

    一.UINavigationController      1.UINavigationController:导航控制器,是iOS中最常用的多视图控制器之一,用它来管理多个视图控制器.可以称为是管理控 ...

  3. mysql TRUNCATE

    保留小数点 select truncate(field1,2) from table1 field3 字段类型为decimal(20,3)

  4. editplus文本编辑器

    EditPlus中文破解版是一款功能强大的文本编辑器,拥有无限制的撤消与重做.英文拼字检查.自动换行.列数标记.搜寻取代.同时编辑多文件.全屏幕浏览功能.还有一个好用的功能,就是它有监视剪贴板的功能, ...

  5. html 元素 变小手

    要设置鼠标指针放在一个元素边界范围内时所用的光标形状,需要对元素的css属性cursor进行设置.cursor属性可能的值1.default 默认光标(通常是一个箭头)2.auto 默认.浏览器设置的 ...

  6. Easy-UI 动态添加DataGrid的Toolbar按钮

    在前人的基础上进行的修改,不知道他是从哪里引用来的,所以没有粘贴引用地址. 原代码不支持1.3.6. 修改功能: 1.如果之前没有添加过工具,用这个方法不能添加(已修复): 2.估计是不支持1.3.6 ...

  7. gvim 常用配置

    set nocompatible set nu! filetype on syntax on set autoindent set ai! "set bg=dark set autoinde ...

  8. JS多种方法实现随机颜色;

    JS随机颜色有很多地方要用到:比如大家看到很多标签连接都是五颜六色.实现随机颜色的方法有多种,下面来看看具体的实现代码: 方法一: var getRandomColor = function() { ...

  9. 监听文本框输入开发仿新浪微博限制输入字数的textarea插件

    监听文本框输入 Firefox.Chrome.IE9,IE10 均支持 oninput 事件,此外所有版本的 IE 均支持 onpropertychange 事件. oninput 事件在用户输入.退 ...

  10. 新装Centos常见问题及解决方案

    1.可以ping通,但无法通过ssh连接虚拟机的解决方案 虚拟机上装了一个 Linux 玩玩, 但在启动 Linux 后,在 Windows 中通过 Xshell 以 SSH 方式连接到 Linux ...