多路查找树

1)什么是多叉树?

要想知道 “多路查找树”,首先我们要对二叉树有一定的概念:二叉树中的每个结点最多只有两个子节点,这种方式对一般的查找和储存方式都能够满足,但是由于二叉树本身结构的问题,使得它存储时有以下问题:

1、由于构建二叉树时需要把数据从某个地方(数据库、文件等)加载到内存,如果节点少,那没什么问题,但是如果节点海量(比如上亿),在构建二叉树时,每个节点都会进行一次io操作,那么构建二叉树的速度就会很慢
2、如果二叉树的节点海量,那么二叉树的高度也特别高,当进行增加、删除、左旋、右旋节点等操作时,速度也会变慢
 

于是在二叉树的基础上我们规定,每个结点的子节点可以超过两个,这就是我们说的多叉树(如下图):

2)多叉查找树:

简单来说:多叉树就是在二叉树的基础上做了一些简单的变动,相应的,多叉树的查找的插入也会相应的发生改变:

    1、 多叉树——B树

    一个m阶的B树或者是空树,或者是满足下面性质的树:

    1、根结点至少有两个子女;

    2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1;

    3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个         数 k 满足:┌m/2┐ <= k <= m ;

    4、所有的叶子结点都位于同一层。

    其有以下性质:

    1.关键字集合分布在整颗树中;

    2 .任何一个关键字出现且只出现在一个结点中;

    3.搜索有可能在非叶子结点结束;

    4.其搜索性能等价于在关键字全集内做一次二分查找;

    5.自动层次控制;

    B树的搜索:

    从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果

    命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为

    空,或已经是叶子结点

    举例:2-3树 

    2-3 树是最简单的 B 树结构, 具有如下特点:

    2-3 树的所有叶子节点都在同一层.(只要是 B 树都满足这个条件)
   有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点.
    有三个子节点的节点叫三节点,三节点要么没有子节点,要么有三个子节点.
    2-3 树是由二节点和三节点构成的树

 

    2、多叉树——B+树

    B+ 树是一种树数据结构,是一个n叉树,每个节点通常有多个孩子,一棵B+树包含根节点、内部节点和叶子节点。根节点可能是一个叶子节点,也可能是一个包含两个或两个以上孩子节点的节点。

上面的这颗树中,得出结论:

1、根节点元素8是子节点2,5,8 的最大元素,也是叶子节点6,8 的最大元素;
2、根节点元素15是子节点11,15 的最大元素,也是叶子节点13,15 的最大元素;
3、根节点的最大元素也就是整个B+树的最大元素,以后无论插入删除多少元素,始终要保持最大   的元素在根节点当中。
4、由于父节点的元素都出现在子节点中,因此所有的叶子节点包含了全部元素信息,并且每一个叶子节点都带有指向下一个节点的指针,形成了一个有序链表。
 

注意:

1、B+树的关键字都出现在叶子结点,叶子节点的关键字是一颗按关键字顺序组织的链表(关键字有序),而B树的关键字分布在整棵树,叶子结点和非叶子节点都有关键字
当搜索时,B+树只可能在叶子节点命中被查询的关键,不能在非叶子节点命中,而B树可以在非叶子节点命中关键字,性能也是等价于在关键字的全集内做一次二分查找
2、B+树非叶子节点的非叶子节点相当于是叶子节点的索引,称为稀疏索引,叶子节点相当于是存储关键字(数据)的数据层,叶子节点也叫稠密索引
3、B+树更适合文件系统
 

3、多叉树——B*树

B*树是 B+树的变体,在 B+树的 非根和非叶子结点再增 加指向兄弟的指针


B*树的说明: 

B*树定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为 2/3,而 B+树的块的最低使用率为的1/2。
从第 1 个特点我们可以看出,B*树分配新结点的概率比 B+树要低,空间使用率更高

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值