基本概念静态查找表动态查找表哈希查找表
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.3 动态查找表
特点: 表结构在查找过程中动态生成。 要求: 对于给定值key,
若表中存在其关键字等于key的记录,则查找成功返回; 否则插入关键字等于key 的记录。
典型的动态表———二叉排序树 一、二叉排序树的定义 二、二叉排序树的插入与删除 三、二叉排序树的查找分析 四、平衡二叉树
1
三、二叉排序树的查找分析
10
(4) 每个非终端结点的结构为: n p0 k1 p1 k2 p2 … kn pn
其中,n为该结点中的关键字个数,除根结点外,其
他所有结点的n大于等于m/2-1,且小于等于m-1;
ki(1≤i≤n) 为 该 结 点 的 关 键 字 且 满 足 ki < ki+1 ; pi(0≤i≤n)为该结点的孩子结点指针且满足pi(0≤i≤n-1) 所指子树中所有结点上的关键字大于等于ki且小于 ki+1, pn结点上的关键字大于kn。
6
3)LR平衡旋转:
若在A的左子树的右子树上插入 结点,使A的平衡因子从1增加至 2,需要先进行逆时针旋转,再 顺时针旋转。
(以插入的结点C为旋转轴)
4)RL平衡旋转:
若在A的右子树的左子树上插入结 点,使A的平衡因子从-1增加至-2, 需要先进行顺时针旋转,再逆时 针旋转。
(以插入的结点C为旋转轴)
最坏情况:即插入的n个元素从一开始就有序。(单支树) 此时树深为n ; ASL= (n+1)/2 ; 与顺序查找情况相同。
最好情况:即:与折半查找中的判定树相同 (形态均衡) 此时树深为:log 2n +1 ; ASL=log 2(n+1) –1 ;与折半查找情况相同。
n 一般情况: ASL 2(1 1 ) ln n (与 log n 同阶)
例:判断下列二叉树是否AVL树?
-1
2
1 -1
-1
0
0
0
1
0
1
0 0
(a) 平衡树
(b) 不平衡树
4
如果在一棵AVL树中插入一个新结点,就有可能 造成失衡,此时必须重新调整树的结构,使之恢 复平衡。我们称调整平衡过程为平衡旋转。
平衡旋转可以归纳为四类: ❖ LL平衡旋转 ❖ RR平衡旋转 ❖ LR平衡旋转 ❖ RL平衡旋转
问题:如何提高二叉排序树的查找效率? 尽量让二叉树的形状均衡
平衡二叉树
2
四、平衡二叉树
平衡二叉树又称AVL树,它是具有如下性质的 二叉树: •左、右子树是平衡二叉树; •所有结点的左、右子树深度之差的绝对值≤ 1
即|左子树深度-右子树深度|≤ 1
为了方便起见,给每个结点附加一个数字,给 出该结点左子树与右子树的高度差。这个数字
B-树中所有结点的孩子结点最大值称为B-树的阶, 通常用m表示,从查找效率考虑,要求m≥3。一棵m阶B树或者是一棵空树,或者是满足下列要求的m叉树:
(1) 树中每个结点至多有m个孩子结点;
(2) 除根结点外,其他非终端结点至少有m/2个孩子 结点;
(3) 若根结点不是叶子结点,则根结点至少有两个孩 子结点;
称为结点的平衡因子balance。这样,可以得到
AVL树的其它性质:
3
❖ 任一结点的平衡因子只能取:-1、0 或 1;如果 树中任意一个结点的平衡因子的绝对值大于1, 则这棵二叉树就失去平衡,不再是AVL树;
❖ 对于一棵有n个结点的AVL树,其高度保持在 O(log2n)数量级,ASL也保持在O(log2n)量级。
13
将k与根结点中的k [i]进行比较: (1) 若k=k [i],则查找成功; (2) 若k<k [1],则沿着指针p [0]所指的子树继
续查找; (3) 若k [i]<k<k [i+1],则沿着指针p [i]所指的
子树继续查找; (4) 若k>k [n],则沿着指针p [n]所指的子树继
续查找。
90
0 53 0 53
0
90
8
【严题集9.9③】已知如下所示长度为12的表:
(Jan, Feb, Mar, Apr, May, June, July, Aug, Sep, Oct, Nov, Dec)
1.试按表中元素的顺序依次插入一棵初始为空的二 叉排序树,画出插入完成之后的二叉排序树, 并求其在等概率的情况下查找成功的平均查找 长度。
现分别介绍这四种平衡旋转。
5
1)LL平衡旋转:
若在A的左子树的左子树上插入 结点,使A的平衡因子从1增加至 2,需要进行一次顺时针旋转。
(以B为旋转轴)
2)RR平衡旋转:
若在A的右子树的右子树上插入 结点,使A的平衡因子从-1增加 至-2,需要进行一次逆时针旋转。
(以B为旋转轴)
A
B
C
A
A B
AC
(5) 所有叶子结点都在同一层上,即B-树是所有结
点的平衡因子均等于0的多路查找树。
11
1 • 51 •
2 • 11 • 30 •
2 • 66 • 78 •
2 ∧ 2 ∧ 7 ∧ 3 ∧ 12 ∧ 15 ∧ 22 ∧ 2 ∧ 35 ∧ 41 ∧ 3 ∧ 53 ∧ 54 ∧ 63 ∧ 4 ∧ 68 ∧ 69 ∧ 71 ∧ 76 ∧ 3 ∧ 79 ∧ 84 ∧ 93 ∧
A
CB
B
AC
A
CB
CA
B
这种调整规则可以保证二叉排序树的次序不变
7
例:请将下面序列构成一棵平衡二叉排序树: ( 13,24,37,90,53)
-012 13
需要RR平衡旋转 (绕B逆转,B为根)
-01 24
0 37
0 37
-01
需要RL平衡旋转 (绕C先顺后逆)
24
Leabharlann Baidu
0
-012
13
3573
0
01
37
14
2. B-树的插入 将关键字k插入到B-树的过程分两步完成:
一棵5阶B-树
12
1. B-树的查找 在B-树中查找给定关键字的方法类似于二叉排序
树上的查找,不同的是在每个记录上确定向下查找的 路径不一定是二路(即二叉)的,而是n+1路的。因为记 录内的关键字序列是有序的数量key[1..n],故既可以 用顺序查找,也可以用折半查找。在一棵B-树上顺序 查找关键字为k的方法为:
2.若对表中元素先进行排序构成有序表,求在等概 率的情况下对此有序表进行折半查找时查找成 功的平均查找长度。
3.按表中元素顺序构造一棵平衡二叉排序树,并求 其在等概率的情况下查找成功的平均查找长度。 新建 Microsoft Word 文档 (2).doc
9
五 B-树
B-树又称为多路平衡查找树,是一种组织和维护外 存文件系统非常有效的数据结构。
特点: 表结构在查找过程中动态生成。 要求: 对于给定值key,
若表中存在其关键字等于key的记录,则查找成功返回; 否则插入关键字等于key 的记录。
典型的动态表———二叉排序树 一、二叉排序树的定义 二、二叉排序树的插入与删除 三、二叉排序树的查找分析 四、平衡二叉树
1
三、二叉排序树的查找分析
10
(4) 每个非终端结点的结构为: n p0 k1 p1 k2 p2 … kn pn
其中,n为该结点中的关键字个数,除根结点外,其
他所有结点的n大于等于m/2-1,且小于等于m-1;
ki(1≤i≤n) 为 该 结 点 的 关 键 字 且 满 足 ki < ki+1 ; pi(0≤i≤n)为该结点的孩子结点指针且满足pi(0≤i≤n-1) 所指子树中所有结点上的关键字大于等于ki且小于 ki+1, pn结点上的关键字大于kn。
6
3)LR平衡旋转:
若在A的左子树的右子树上插入 结点,使A的平衡因子从1增加至 2,需要先进行逆时针旋转,再 顺时针旋转。
(以插入的结点C为旋转轴)
4)RL平衡旋转:
若在A的右子树的左子树上插入结 点,使A的平衡因子从-1增加至-2, 需要先进行顺时针旋转,再逆时 针旋转。
(以插入的结点C为旋转轴)
最坏情况:即插入的n个元素从一开始就有序。(单支树) 此时树深为n ; ASL= (n+1)/2 ; 与顺序查找情况相同。
最好情况:即:与折半查找中的判定树相同 (形态均衡) 此时树深为:log 2n +1 ; ASL=log 2(n+1) –1 ;与折半查找情况相同。
n 一般情况: ASL 2(1 1 ) ln n (与 log n 同阶)
例:判断下列二叉树是否AVL树?
-1
2
1 -1
-1
0
0
0
1
0
1
0 0
(a) 平衡树
(b) 不平衡树
4
如果在一棵AVL树中插入一个新结点,就有可能 造成失衡,此时必须重新调整树的结构,使之恢 复平衡。我们称调整平衡过程为平衡旋转。
平衡旋转可以归纳为四类: ❖ LL平衡旋转 ❖ RR平衡旋转 ❖ LR平衡旋转 ❖ RL平衡旋转
问题:如何提高二叉排序树的查找效率? 尽量让二叉树的形状均衡
平衡二叉树
2
四、平衡二叉树
平衡二叉树又称AVL树,它是具有如下性质的 二叉树: •左、右子树是平衡二叉树; •所有结点的左、右子树深度之差的绝对值≤ 1
即|左子树深度-右子树深度|≤ 1
为了方便起见,给每个结点附加一个数字,给 出该结点左子树与右子树的高度差。这个数字
B-树中所有结点的孩子结点最大值称为B-树的阶, 通常用m表示,从查找效率考虑,要求m≥3。一棵m阶B树或者是一棵空树,或者是满足下列要求的m叉树:
(1) 树中每个结点至多有m个孩子结点;
(2) 除根结点外,其他非终端结点至少有m/2个孩子 结点;
(3) 若根结点不是叶子结点,则根结点至少有两个孩 子结点;
称为结点的平衡因子balance。这样,可以得到
AVL树的其它性质:
3
❖ 任一结点的平衡因子只能取:-1、0 或 1;如果 树中任意一个结点的平衡因子的绝对值大于1, 则这棵二叉树就失去平衡,不再是AVL树;
❖ 对于一棵有n个结点的AVL树,其高度保持在 O(log2n)数量级,ASL也保持在O(log2n)量级。
13
将k与根结点中的k [i]进行比较: (1) 若k=k [i],则查找成功; (2) 若k<k [1],则沿着指针p [0]所指的子树继
续查找; (3) 若k [i]<k<k [i+1],则沿着指针p [i]所指的
子树继续查找; (4) 若k>k [n],则沿着指针p [n]所指的子树继
续查找。
90
0 53 0 53
0
90
8
【严题集9.9③】已知如下所示长度为12的表:
(Jan, Feb, Mar, Apr, May, June, July, Aug, Sep, Oct, Nov, Dec)
1.试按表中元素的顺序依次插入一棵初始为空的二 叉排序树,画出插入完成之后的二叉排序树, 并求其在等概率的情况下查找成功的平均查找 长度。
现分别介绍这四种平衡旋转。
5
1)LL平衡旋转:
若在A的左子树的左子树上插入 结点,使A的平衡因子从1增加至 2,需要进行一次顺时针旋转。
(以B为旋转轴)
2)RR平衡旋转:
若在A的右子树的右子树上插入 结点,使A的平衡因子从-1增加 至-2,需要进行一次逆时针旋转。
(以B为旋转轴)
A
B
C
A
A B
AC
(5) 所有叶子结点都在同一层上,即B-树是所有结
点的平衡因子均等于0的多路查找树。
11
1 • 51 •
2 • 11 • 30 •
2 • 66 • 78 •
2 ∧ 2 ∧ 7 ∧ 3 ∧ 12 ∧ 15 ∧ 22 ∧ 2 ∧ 35 ∧ 41 ∧ 3 ∧ 53 ∧ 54 ∧ 63 ∧ 4 ∧ 68 ∧ 69 ∧ 71 ∧ 76 ∧ 3 ∧ 79 ∧ 84 ∧ 93 ∧
A
CB
B
AC
A
CB
CA
B
这种调整规则可以保证二叉排序树的次序不变
7
例:请将下面序列构成一棵平衡二叉排序树: ( 13,24,37,90,53)
-012 13
需要RR平衡旋转 (绕B逆转,B为根)
-01 24
0 37
0 37
-01
需要RL平衡旋转 (绕C先顺后逆)
24
Leabharlann Baidu
0
-012
13
3573
0
01
37
14
2. B-树的插入 将关键字k插入到B-树的过程分两步完成:
一棵5阶B-树
12
1. B-树的查找 在B-树中查找给定关键字的方法类似于二叉排序
树上的查找,不同的是在每个记录上确定向下查找的 路径不一定是二路(即二叉)的,而是n+1路的。因为记 录内的关键字序列是有序的数量key[1..n],故既可以 用顺序查找,也可以用折半查找。在一棵B-树上顺序 查找关键字为k的方法为:
2.若对表中元素先进行排序构成有序表,求在等概 率的情况下对此有序表进行折半查找时查找成 功的平均查找长度。
3.按表中元素顺序构造一棵平衡二叉排序树,并求 其在等概率的情况下查找成功的平均查找长度。 新建 Microsoft Word 文档 (2).doc
9
五 B-树
B-树又称为多路平衡查找树,是一种组织和维护外 存文件系统非常有效的数据结构。