平衡多路搜索树

2.3.3 平衡多路搜索树

为了提高页的利用率,我们希望树的一个节点存储的信息较多;为了减少一次检索的IO操作次数,我们希望搜索树的高度很小。基于这两个目的,平衡多路搜索树被提出。下面介绍两种最常用的平衡多路搜索树:B-树和B+树。

2.3.3.1 B-树

一棵阶数为mm的B-树定义如下:

  • 如果根结点不是叶结点,则其至少有两棵子树。
  • 每一个非根的分支结点都有k-1个关键字和k个子树,其中 ⌈m/2⌉⩽k⩽m
  • 所有叶子结点都位于同一层次。
  • 所有分支结点包含下列信息数据,其中: 为关键字,且为指向子树根结点的指针,且指针所指子树中所有结点的关键字均小于 所指子树中所有结点的关键字均大于为关键字的个数。

一棵阶数为3的B-树如下所示。


B-树的代码定义如下:
typedef struct node{                //B-树和B-树结点类型 
    int keynum;                     //结点关键字个数
    KeyType key[MAXM];              //关键字数组,key[0]不使用 
    struct node *parent;            //双亲结点指针
    struct node *ptr[MAXM];         //孩子结点指针数组 
}BTNode,*BTree;
在B-树中查找指定的关键字K的大致代码如下:
typedef struct{                     //B树查找结果类型 
    BTNode *pt;                     //指向找到的结点
    int i;                          //在结点中的关键字位置; 
    int tag;                       
B+树是对B-树的一种变形树,它与B-树的差异在于: 一棵B+树如下所示: 前面提到二叉树之所以不适合作为索引是因为它的高度很大,导致一次检索的磁盘I/O次数很多。我们从这个角度来谈论为什么平衡多路搜索树为什么适合作为索引。 我们假设为1000,则高度为3的B+数有个关键字,则可以链接到1亿个数据记录,并且一次检索的I/O次数为3。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java开发之数据库索引篇,适合所有求职开发岗的同学~ 本专刊购买后即可解锁所有章节,故不可以退换哦~

全部评论

相关推荐

牛客74464229...:年底就这样,招人的要不是很缺人的,要不就是岗位要求高的
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务