B- 树查找算法分析

来源:互联网 发布:真实的蒋介石知乎 编辑:程序博客网 时间:2024/06/05 00:39

B- 树查找算法分析

从查找算法中可以看出, 在B- 树中进行查找包含两种基本操作:

        ( 1) 在B- 树中查找结点;

        ( 2) 在结点中查找关键字。

        由于B- 树通常存储在磁盘上, 则前一查找操作是在磁盘上进行的, 而后一查找操作是在内存中进行的, 即在磁盘上找到指针p 所指结点后, 先将结点中的信息读入内存, 然后再利用顺序查找或折半查找查询等于K 的关键字。显然, 在磁盘上进行一次查找比在内存中进行一次查找的时间消耗多得多.

       因此, 在磁盘上进行查找的次数、即待查找关键字所在结点在B- 树上的层次树, 是决定B树查找效率的首要因素。

       设B树包含N个关键字#因此有N+1个树叶都在第J+1 层。 第一层为根,至少一个结点,根至少有两个孩子,因此在第二层至少有两个结点。除根和树叶外,其它结点至少有[m/2]个孩子,因此第三层至少有2*[m/2]个结点,在第四层至少有2*[m/2]2 个结点…那么在第J+1层至少有2*[m/2]J-1个结点,而J+1层的结点为叶子结点,于是叶子结点的个数N+1有

       N+1≧2*[m/2]J-1J≦log[m/2]((N+1)/2)+1

       这意味着若N=1999998,m=199则J至多等于4,因为对B树的一次查找至多进行J次存取,所以,这个公式保证了高效率地查找B树。

       再来分析一下对B树进行插入运算时,需要分裂的结点的个数的上限。 设L是内部结点的个数,除根外的所有内部结点都包括[m/2]J-1个关键字时)B树所包括的总关键字个数最少,因此有

       N≧1+([m/2]-1)(L-1)

      于是

       L-1≦(N-1)/( [m/2]-1)

       现在考虑最坏的情况,即从第三个结点开始,每个结点均是经过分裂而得到的,也就是说插入N个关键字的过程中进行了L-1次分裂,那么每插入一个关键字平均分裂的结点个数为(L-1)/N≦(N-1)/( [m/2]-1)*N≦1/( [m/2]-1).

原创粉丝点击