动态查找树表之B-树

【说明】博客内容选自课件内容和邓俊辉老师《数据结构下》课件内容

目录

1.B-树的定义

(1). 多叉特性

(2). 查找特性

(3). 平衡特性

2.查找算法:

3.插入操作

4.删除操作

1.所删的结点是最下层的内部结点

2. 所删结点不是最下层的内部结点

5.查找性能的分析

最大书高和最小树高

6. B-树的必要性

1B-树的定义

B-树是一种满足以下特性m叉动态搜索树

1)根结点至少有两个子树

2)除根结点外,所有内部结点至少m/2 个子树,最多m 棵子树;

3)所有外部结点位于同一层上;

《动态查找树表之B-树》

《动态查找树表之B-树》

(1). 叉特性

  m 阶的B-树上,每个内部结点可能含有:

n 关键字 Ki1inm/2 -1nm-1

n+1 指向子树的指针 Ai0≤i≤n;

(2). 查找特性

l内部结点中的多个关键字从小到大有序排列,即:K1< K2 < … < Kn;

l Ai-1 所指子树上所有关键字均小于Ki;

l Ai 所指子树上所有关键字均大于Ki;

(3). 平衡特性

l树中所有叶子(外部)结点均在树的同一层次上;

l根结点或为叶子结点,或至少含有两棵子树;

l其余所有非叶结点均至少含有m/2棵子树,至少m/2-1个关键字,至多含有 m 棵子树;

《动态查找树表之B-树》

2.查找算法:

从根结点出发,沿指针搜索内部结点和在结点内进行顺序(或折半)查找 两个过程交叉进行。

l查找成功,则返回指向被查关键字所在结点的指针关键字在结点中的位置

l 查找不成功,则返回插入位置

3.插入操作

在查找不成功之后,需进行插入。显然,关键字插入位置 p 必定在最下层的非叶结点,有下列几种情况:

1 p 为空,则建新的根结点

2插入后,该结点的关键字个数n<m不修改指针;

3插入后,该结点的关键字个数 n=m,则需进行“结点分裂”

令 s =m/2,假设插入后的原结点中:A0, K1, …, Ks-1As-1 , Ks,  As, Ks+1,… Km, Am

则在原结点中保留:A0K1,。。。, Ks-1As-1);

并建新结点AsKs+1,。。。    ,KmAm);

然后Ks 插入p双亲结点;

《动态查找树表之B-树》

《动态查找树表之B-树》

4.删除操作

与插入相反,首先必须找到待删除关键字所在结点,并删除之。删除分两种情况:

1.所删的结点下层的内部结点

此时又有三种可能:

1被删关键字所在结点的关键字数目大于m/2-1则只需删除该关键字和相应指针;

2删关键字所在结点关键字数目等于m/21且该结点相邻的左(右)兄弟结点中的关键字大于m/2-1,将其兄弟结点中的最小(最大)的关键字上移至双亲结点中,将双亲结点中小于(大于)且紧靠该上移关键字的关键字下移至被删关键字所在结点中

3)  被删关键字所在结点和其相邻()兄弟结点中的关键字数目均等于m/21则在删除关键字之后,将它所在结点中剩余的关键字,加上双亲结点中的相应关键字,合并到左(右)兄弟结点中如果因此使双亲结点中的关键字数目小于m/21 ,则依次作相应处理。

《动态查找树表之B-树》

2. 所删结点不是最下层的内部结点

     设所删关键字为Ki则以指针Ai所指子树中的最小关键字Y替代Ki ,然后删除相应结点中的Y

5.查找性能的分析

问题:含 N 关键字m B-树可能达到的最大深度 H 为多少?

反问: 深度为HmB-树中,至少含有多少个结点

先推导每一层所含最少结点数:

《动态查找树表之B-树》

问题:如果B- 树中含有 N 个关键字,则叶子结点的个数为?N+1

假设 m B-树的深度为 H+1,由于第 H+1 层为叶子结点,所以深度为 H+1mB-树的叶子结点至少为2*⌈m/2 ^H-1

 因此: N+1≥2(m/2)H-1

             H-1≤logm/2((N+1)/2)

             H≤logm/2 ((N+1)/2)+1

结论:在含 N 个关键字的mB-树上进行一次查找,需访问的结点个数不超过log m/2  ((N+1)/2)+1

疑惑:B-树中的关键字到底指的是什么?为什么叶子节点的个数比关键字的个数多一?

关键字指的是B-树所有节点中存储的值,

一棵B-树包含根节点、内部节点和叶子节点(也就是外部节点)

个数之所以多一应该是类似完全二叉树吧,就是最底层的节点比除底层外所有节点个数多一。

但是不应该啊,因为B-树的每个节点的分支是在一个区间之内的,就是m/2⌉ 和m之间

难道是和建立B-树的过程有关吗???

最大树高和最小树高

《动态查找树表之B-树》

《动态查找树表之B-树》

6. B-树的必要性

《动态查找树表之B-树》

《动态查找树表之B-树》

《动态查找树表之B-树》

    原文作者:B树
    原文地址: https://blog.csdn.net/liuxiang15/article/details/82744722
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞