静态搜索结构.ppt

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

p
38
rc
rc
40
13
40
p
38
45
39
45
13
39
4
4
左重加左的右——双旋 左转再右转
结点p左重 lc的右子树加一个结点 不平衡
p
38
lc
13
先以lc np为轴左转
再以p, np为轴右转
p
np
38
20
np
40
20
p
40 lc
13
38
np lc
10
20
13
26
10
26
40
26 10
右重加右的左——双旋 右转再左转
j1其中n1sn1logn111n1logn1n满二叉树n个数据的搜索成功平均概率时间复杂性n1nlogn11当n50时近似于logn11n个元素的折半搜索1n2k11搜索成功平均概率时间复杂性介于logk11之间之间klogn1n个元素的折半搜索成功平均概率时间复杂性logn112斐波那契搜索根据斐波那契序列的特点对有序表分割0618法斐波那契序列13213455fnfn2fnfn1从20个数的数表中查找一个纪录先找比较第13个如果小再比较第8个如果大比较后几个数的第5个每次都比较位于这个数列的黄金分割点0618处以下序列中查找元素10的过程101112131415平均查找性能优于折半查找olog最坏情况比折半查找差3静态树表的搜索不等概率查找时折半查找不一定好以每点查找次数概率为这点的权w带权二叉树总路径长度phwph最小的二叉树叫静态最优二叉树不同于霍夫曼树
= 1+2*2+3*4+4*8+······+k*2k-1
k
s =∑j·2j-1
j=1
其中 n=2k-1
满二叉树n个数据的总查找次数:
k
s =∑j·2j-1
其中 n=2k-1
j=1
S=1+2·2+3·4+4*8+5*16+·····+k·2k-1
= 1+2+4+8+16+···+2k-1+
2+2·4+3·8+4·16+····+(k-1)·2k-1
1)
=k·2k-(1+2+4+···+2k-1)=k·2k-(2k-1)=(k-1)·2k+1
满二叉树n个数据的总查找次数:
k
s =∑j·2j-1
其中 n=2k-1
j=1
令s=f(k), k=1,2,3,4,······
f(1)=1 f(2)=5 f(3)=17 f(4)=49
f(5)=129 ······· f(k)-1= 0, 22, 24, 3·24,27,······
log2(n+1)-1/2
斐波那契搜索
根据斐波那契序列的特点对有序表分割
0.618法 斐波那契序列
1 2 3 5 8 13 21 34 55······f(n)······ f(n+2)=f(n)+f(n+1)
从20个数的数表中查找一个纪录 先找比较第13个,如果小,再比较第8个,····
如果大 比较后几个数的第5个······ 每次都比较位于这个数列的黄金分割点0.618处
索引表
22 12 13 8 9 20 33 42 44 38 24 48 60 58 74 49 86 53
分块有序 后一子表中的关键字都大于前一子表中的关
键字
索引顺序表的查找
22 48 86 1 7 13
索引表
22 12 13 8 9 20 33 42 44 38 24 48 60 58 74 49 86 53
49
lc
13
65
p
10
38
左重加左——右转
结点p左重,还要加一个左结点 不平衡
右转:将p作lc的右子结点,
将lc的右子树接成p的左子树
p
38
lc
lc
13
13
40
p
10
20
10
38
4
20
40
4
右重加右——左转
结点p右重,还的左子结点,
将rc的左子树接成p的右子树
找到满足条件的数据对象 报告该对象在结构中的位置 给出整个纪录的信息 搜索不成功
搜索结构在搜索前后不发生变化 搜索的同时执行插入或删除 结构自行调整
先排序,分类,编目,索引 优化结构
一、静态搜索结构
基于数组的数据表类 顺序表——线性表、数组、链表。
(1) 顺序搜索 从头至尾逐个比较 最快O(1) 最慢O(n)
h<(3/2) log2 (n+1)-1
练习 一. 画出以下输入所对应AVL树: 1)R,O,T,A,R,Y,C,L,U,B 2)60,25,7,99,15,3,10
fh+1=fh+fh-1 nh = fh-1 nh=(51/2)*((1+ 51/2)/2)h+3 -1
n个结点的AVL树的高度h至多是多少?
n=(51/2)*((1+ 51/2)/2)h+3 -1 (n+1)/(51/2)=((1+ 51/2)/2)h+3
log2 (n+1)-log251/2= (h+3 )(log2 ((1+ 51/2)/2)) log2 ((1+ 51/2)/2)≈0.694 h+3= (log2 (n+1)-log251/2)/0.694
ai+1,······,ah 为右子树
构造次优查找树
令swi=
i
∑wj
,
Δpi = swh-swi-swi-1
j=l
ABC DE FG H I wi 1 1 2 5 3 4 4 3 5 s wi 1 2 4 9 12 16 20 23 28 Δpi 27 25 22 15 7 0 8 15 23
Δpi 11 9 3 1 9
字与中点关键字的大小,反复直到成功。
求n个数据折半查找的等概率成功搜索的平均时 间复杂性
1 2 3 4 5 6 7 8 9 10
1
2
2
3
3
3
4
4
3 4
1+2*2+4*3+3*4=29
O(29/10)
满二叉树n个数据的总查找次数:
1
2
2
3
3
444 4
3
3
4 44 4
S=1+2*2+4*3+8*4+······+2k-1*k
S=(k-1)2k+1
满二叉树n个数据的总查找次数:
k
s =∑j·2j-1
其中 n=2k-1
j=1
S= (k-1)·2k+1 由 n=2k-1 得 k=log2(n+1) S=(n+1)(log2(n+1)-1)+1
= (n+1)log2(n+1)-n 满二叉树n个数据的搜索成功平均概率时间复杂性
38
65
13
49
97
27
76
二叉搜索树的插入过程
57
45 12 8 57 60 20 11 59 50 3 20
60
57 20 8 45 60 59 3 12 50 11 8
45
59
45
3
12
50
12
57
11
8
20 50
60
3
11
59
平衡二叉树AVL树 ——加快查找排序的速 度
定义: 左右两子树深度之差不超过1, 左子树和右子树都是平衡二叉树。
45

平 衡
12
45 12
平 衡
57
8
20
8
20
50
60
3
11
3
11
59
同一个数组的二叉排序树和二叉平衡树
20 30 80 40 10 60 50 70
4290
61435390 10
2870
4390
20
6145390
1430
9170
60
9570
4790
1430
2870
50
4790
AVL树的结点
增加一个平衡因子
left
data
balanceFactor
right
balance=height(right subtree)-height(left subtree) balance=1或-1
平衡因子
1
49
1
38
65
13
左重加左——右转 结点p左重,还要加一个左结点 不平衡
49
p
38
lc
13
10
右转:
65
将p作lc的右子结点
结点p右重 rc的左子树加一个结点 不平衡
p
38
先以rc np为轴右转
再以p, np为轴左转
p
np
38
46
13
rc
55 13
np 46
np p
38
55
np
46
67
41
rc
55
13
41
67
41
67
AVL树的生成
20 30 80 40 10 60 50 70
4290 61435390
2870
左转
61435390
静态搜索结构 动态搜索结构 散列 可扩充散列
查找 搜索
搜索结构 同一数据类型(纪录)的元素
构成的数据集合。
搜索
在数据集合中寻找满足条件的对
象(数据元素)。
关键字 数据元素中某个字段(数据项)
的值。
主关键字 唯一地表示一个纪录 。
次关键字 标识若干纪录
搜索成功
搜索失败 静态搜索 动态搜索
提高效率
二、动态搜索表
特点 查找过程中生成搜索表 查找失败时插入纪录
二叉搜索树 平衡二叉搜索AVL树
二叉搜索树 (二叉排序树)
其左非空子树上所有结点的值都小于根结点的值 其右非空子树上所有结点的值都大于根结点的值 左右子树也是二叉搜索树
二叉搜索树的作用:排序,检索
49 38 65 97 76 13 27 49 49
数据 al,al+1,······,ai-1,ai, ai+1,······,ah 权值 wl,wl+1,·····wi-1,wi,wi+1,·····,wh

h i-1
Δpi= ∑wj-∑wj
j=i+1 j=l
取最小值:
Δpi=min{Δpj: l≤j≤h} 以ai为根, al+1,······,ai-1为左子树
以下序列中查找元素10的过程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
平均查找性能优于折半查找 O(log2n) 最坏情况比折半查找差
(3)静态树表的搜索
不等概率查找时折半查找不一定好, 以每点查找次数(概率)为这点的权wi 带权二叉树总路径长度
PH=∑wihi
i
PH 最小的二叉树叫静态最优二叉树
= 1+2+4+8+16+···+2k-1+
2·(1+2·2+3·4+4*8+5*16+·····+(k-1)·2k-2)
= 1+2+4+···+2k-1+2·(1+2+4+···+2k-2)+
22·(1+2+4+···+2k-3)+·····+2k-2·(1+2)+2k-1
=2k-1+2·(2k-1-1)+22·(2k-2-1)+·····+2k-2·(22-1)+ 2k-1(2-
查找 关键字key=38 1. 先检索索引表 确定子表位置 2. 再在子表中搜索
索引顺序表的查找成功的平均概率时间复杂性
索引表查找时间+子表查找时间 设索引表长为s,搜索表长为n,被平均分成s块, 每块长n/s,
索引表平均查找时间 (s+1)/2 子表平均查找时间 (n/s+1)/2
½(s+1)+ ½(n/s+1)= ½(s+n/s)+1 当 s=√n 时 有最小值 √n +1
有序索引顺序表
当索引顺序表已经排序时,子块搜索可以用折半 搜索。 平均查找时间:
(s+1)/2 +log2(1+n/s)-1/2 = log2(1+n/s)+s/2 索引也用折半查找,平均查找时间
log2(s+1)-1/2 +log2(1+n/s)-1/2 = log2(s+1)(1+n/s)-1 当s= √n 时 2 log2(√n +1)-1
817
Δpi 3 1 2
ABC DE FG H I wi 1 1 2 5 3 4 4 3 5
4F
HP=4*1+5*2+3*2+
5D
3H
1*3+3*3+4*3+5*3+ 1*4+2*4=71<78
B 1
EG 34
I 5
次最优树
A
C
1
2
平均查找次数 O(HP/swh)
索引顺序表
最大关键字 22 48 86 起始地址 1 7 13
不同于霍夫曼树:每个结点都有权值,都 要查找。
PH=3·1+2·2+2·4+1·3 ABCD E FGH I
+5·3+4·3+3·3+1·4+5·4 1 1 2 5 3 4 4 3 5 =78
查找次数
3E
2C
4G
不是静态最优二叉 树
B 1
A 1 权值
D F 3H 54
I
5
次优查找树 Nearly Optimal Search
((n+1)/n) log2(n+1)-1 当n>50时 近似于
log2(n+1)-1
n个元素的折半搜索
2k-1≤n<2k+1-1
搜索成功平均概率时间复杂性
介于 即
log2(2k)-1 和 log2(2k+1)-1 之间 k-1 和 k 之间
k=[log2(n+1)] n个元素的折半搜索成功平均概率时间复杂性
= 0·21, 1·22, 2·23, 3·24,4·25····· 猜想 f(k)-1=(k-1)·2k
k
f(k)= s =∑j·2j-1
j=1
其中 n=2k-1
f(k)-1=(k-1)2k 证明
1) f(1)-1=0 2) f(k+1)-1=f(k)+(k+1)·2k –1
= (k-1)2k+ (k+1)·2k =2·k·2k=k·2k+1 =(k+1-1)·2k+1
相关文档
最新文档