多路查找树开篇

转载 2015年11月19日 15:19:07

转载地址:http://blog.csdn.net/dazhong159/article/details/7964245

前言(自己加的)

动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树
(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。 
但是咱们有面对这样一个实际问题:就是大规模数据存储中,实现索引查询这样一
个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下(为什么会出现这种情况,待会在外部存储器-磁盘中有所解释),那么如何减少树的深度(当然是不能减少查询的数据量),一个基本的想法就是:采用多叉树结构(由于树节点元素数量是有限的,自然该节点的子树数量也就是有限的)。 
这样我们就提出了一个新的查找树结构——多路查找树。根据平衡二叉树的启发,
自然就想到平衡多路查找树结构,也就是这篇文章所要阐述的第一个主题B~tree(B树结构)。

有一点,再次强调下:B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是一种树。而事实上是,B-tree就是指的B树

1、引言

        以前我们所讨论的数据结构,处理数据都是在内存中。假如我们所要操作的数据集非常大,大到内存无法处理了怎么办?如数据库上千万记录的数据表、硬盘中上万个文件等。在这种情况下,对数据的处理需要不断的从硬盘等存储设备中调入或者调出内存页面。而过多的进行IO读写,显然会降低系统的效率。为了降低对外存的访问次数,我们就需要新的数据结构来处理这样的问题。

2、2-3树

        每个节点都具有2个孩子(称之为2节点)或者3个孩子(称之为3节点)。

        一个2节点包含一个元素和两个孩子(或没有孩子)。

        一个3节点包含两个元素和三个孩子(或没有孩子)。

3、2-3-4树

        每个节点都具有2个孩子(称之为2节点)或者3个孩子(称之为3节点)或者4个孩子(称之为4节点)。

        一个2节点包含一个元素和两个孩子(或没有孩子)。

        一个3节点包含两个元素和三个孩子(或没有孩子)。

        一个4节点包含三个元素和四个孩子(或没有孩子)。

4、B树

        B树是一种多路查找树,2-3树和2-3-4树都是B树的特例。节点最大的孩子数目称为B树的阶,因此2-3树是3阶B树,2-3-4树是4阶B树 。

        一个m阶的B树具有如下性质:

        1)如果根节点不是叶子节点,则其子树个数范围为[2,m];

        2)分支节点子树范个数围为[m/2,m];

        3)所有叶子节点在同一层次;

        4)所有分支节点包含下列信息:关键字个数n,关键字k1,...,kn,指向子树根结点的指针A0,...,An。

        如果内存与外存交换数据次数频繁,会造成时间上的瓶颈,那么B树结构是怎么做到减少次数呢?

        我们的外存,比如硬盘,是将所有信息分割成相等大小的页面,每次硬盘读写的都是一个或多个完整的页面。在一个典型的B树应用中,要处理的硬盘数据量很大,因此无法一次全部装入内存。因此我们会对B树进行调整,使得B树的阶数(或节点的元素)与硬盘存储的面页面大小相匹配。比如说一颗B树的阶为1001(即一个节点包含1000个关键字),高度为2,他可以存储超过10亿个关键字,我们只要让根节点持久的保留在内存中,那么在这棵树上,寻找某一个关键字至多需要两次硬盘的读取。通过这种方式,在有限内存的情况下,每一次磁盘的访问我们都可以获得最大量的数据。由于B树每个节点可以具有比二叉树多得多的元素,所以与二叉树相比,它们减少了必须访问节点和数据块的数量,从而提高了性能。可以说B树的数据结构就是为内外存的数据交互准备的。

5、B+树

        对于树结构来说,我们都可以通过中序遍历来顺序查找树中的元素,这一切都是在内存中进行。可是B树结构中,我们往返于每个节点之间也就意味着,我们必须在硬盘的页面之间进行多次访问。

        为了能够解决所有元素遍历等基本问题,我们在原有B树结构基础上,加上了新的元素组织方式,这就是B+树。

        B+树不同与B-树的地方:

        1)有n棵子树的节点中包含n个关键字

        2)所有的叶子节点包含全部关键信息,及指向含这些关键字记录的指针

        3)所有分支结点可以看成是索引,节点中仅含有其子树中的最大(或最小)关键字

        这样的数据结构最大的好处就是,如果是要随机查找,我们就从根节点出发,与B树的查找方式相同,只不过即使在分支节点找到了待查找的关键字,它也直是用来索引的,不能提供实际记录的访问,还是需要到达包含此关键字的终端节点。

        如果我们是要从最小关键字从小到大进行顺序查找,我们就可以从最左侧的叶子节点出发,不经过分支节点,而是沿着指向下一个叶子节点的指针遍历所有的关键字。


大话数据结构—多路查找树(B树)

多路查找树(muitl-way search tree),其每一个节点的孩子数可以多于两个,且每一个节点处可以存储多个元素。主要有4中特殊形式。一、2-3树定义:其中的每一个节点都具有两个孩子(称为2...
  • wtyvhreal
  • wtyvhreal
  • 2015年06月10日 15:10
  • 1063

多路查找树之2-3树的插入原理

多路查找树之2-3树的插入原理
  • qq78442761
  • qq78442761
  • 2017年03月04日 10:40
  • 1399

多路查找树开篇

1、引言         以前我们所讨论的数据结构,处理数据都是在内存中。假如我们所要操作的数据集非常大,大到内存无法处理了怎么办?如数据库上千万记录的数据表、硬盘中上万个文件等。在这种情况下,对数...
  • dazhong159
  • dazhong159
  • 2012年09月11日 22:40
  • 3404

多路查找树

在前面专题中讲的BST、AVL、RBT都是典型的二叉查找树结构,其查找的时间复杂度与树高相关,都是在内存中进行的。那么降低树高自然对查找效率是有所帮助的。     另外还有一个比较实际的问题:就是大...
  • qq_31821675
  • qq_31821675
  • 2017年04月02日 12:20
  • 125

查找三 多路查找树(2-3树,2-3-4树,B树、B+树)

应用场景:解决在硬盘中的大量数据中的查找。因为大量数据存储在硬盘中,不能一次全部加载到内存中,而每次查一个数据读一次硬盘,读取速度太慢,这时就需要使用一种数据结构一部分一部分读入,这就是多路查找树的作...
  • u010512964
  • u010512964
  • 2017年07月26日 00:01
  • 366

大话数据结构——查找

查找(Searching)是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。一、顺序表查找顺序查找又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或最后一个...
  • u013159040
  • u013159040
  • 2016年06月16日 11:35
  • 359

多路查找树/B-树/B+树

在前面专题中讲的BST、AVL、RBT都是典型的二叉查找树结构,其查找的时间复杂度与树高相关。那么降低树高自然对查找效率是有所帮助的。另外还有一个比较实际的问题:就是大量数据存储中,实现查询这样一个实...
  • Aiphis
  • Aiphis
  • 2015年07月25日 19:11
  • 408

多路查找树(B树)

2-3树2-3树就是一棵多路查找树:其中的每一个结点都具有两个孩子或三个孩子。 一个2结点包含一个元素和两个孩子,一个3结点包含两个元素和三个孩子2-3-4树2-3-4树其实就是对2-3树的概念扩展...
  • qq_33351410
  • qq_33351410
  • 2016年09月08日 09:57
  • 182

多路RTSP播放器直播与点播技术实现

多路RTSP播放器直播与点播技术实现 多路RTSP高清视频播放器下载地址:http://download.csdn.net/detail/u011352914/6604437...
  • htjx99
  • htjx99
  • 2013年11月25日 12:06
  • 1326

多路视频采集与输出

多路采集芯片TW2864 TVP5158
  • zouwen198317
  • zouwen198317
  • 2015年10月26日 10:57
  • 2168
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多路查找树开篇
举报原因:
原因补充:

(最多只允许输入30个字)