数据结构

数据结构题目61:B-树的查找

2020-05-14  本文已影响0人  玲儿珑

题目:T为m阶B-树的根结点指针,k为要找的关键字值,若查找成功,则返回被查找记录的位置;否则,给出查找失败的信息。

解题思路:根据给定的关键字值ki,先在根结点的关键字集合中采用顺序查找方法或者折半查找方法(因为结点中的关键字是按值有序排列的)进行查找。若有k=keyi,则查找成功,根据相应的指针即可取得记录;否则,若ki<keyi(i=1,2,..,n),则取指针p(i-1)所指结点后重复这个查找过程,直到在某结点中查找成功,或者在查找过程中出现p(i-1)=空(null),查找失败。

具体算法如下:

function mbsearch(T, k) {
    let i, n, q, p=T
    while ( p!=null ) {
        n = p.keynum    //取得当前结点中关键字的个数
        p.key[n+1] = Maxkey //给第n+1个关键字域赋一个常量Maxkey
        i = 1   //i为关键字值比较的序号,初值为1
        while ( k > p.key[i] ) {    //在当前的关键字集合中进行比较
            i++
        }
        if ( k == p.key[i] ) {
            return (p, i, 1)    //查找成功
        } else {
            q = p   //保存双亲结点的位置
            p = p.ptr[i-1]  //准备查找下一层的一棵子树
        }
    }
    return (q,i,0)  //查找失败
}

性能分析:
由上可知,在B-树中的查找时间取决于以下两个因素:
1.给定关键字值所在结点的层次数,这关系到I/O操作的次数;
2.结点中关键字值的个数。
时间复杂度为O(以2为底的logn)。

上一篇 下一篇

猜你喜欢

热点阅读