第九章查找 习题解答
第9章 查找答案

第9章查找9.1知识点:静态查找表一、填空题1. 顺序查找(线性查找)2. 查找表3.静态查找表动态查找表4. ∟log2n」+15. 分块查找关键字有序排列索引表6. O(m+n) (m是块长度,n是索引表长度)7.n n+1二、选择题1.B2.D3.A4.B.三、判断题1. √2. ×3. √4. ×四、简答题1.答:不适合!虽然有序的单链表的结点是按从小到大(或从大到小)顺序排列,但因其存储结构为单链表,查找结点时只能从头指针开始逐步搜索,故不能进行折半查找。
二分查找的速度在一般情况下是快些,但在特殊情况下未必快。
例如所查数据位于首位时,则线性查找快;而二分查找则慢得多。
2.(1)先画出判定树如下(注:mid=⎣(1+12)/2⎦=6):(2)查找元素54,需依次与30, 63, 42, 54 等元素比较;(3) 查找元素90,需依次与30, 63,87, 95等元素比较;(4)求ASL之前,需要统计每个元素的查找次数。
判定树的前3层共查找1+2×2+4×3=17次;但最后一层未满,不能用8×4,只能用5×4=20次,所以ASL=1/12(17+20)=37/12≈3.083.(1)每块理想长度d=≈45(2)块数b=2000/45=45(3)ASL=(b+1)/2+(d+1)/2=(45+1)/2+(45+1)/2=46(4)b= 2000/20=100(块) 每块元素个数d=20ASL=(b+1)/2+(d+1)/2 =(100+1)/2+(20+1)/2=61五、算法设计题1.//折半查找的递归算法int Search_Bin_Recursive(SSTable ST, int key, int low, int high){if(low>high) return 0; //查找不到时返回0mid=(low+high)/2;if(ST.elem[mid].key= =key) return mid;else if(ST.elem[mid].key>key)return Search_Bin_Recursive(ST, key, low, mid-1);else return Search_Bin_Recursive(ST, key, mid+1, high);}}//Search_Bin_Recursiveint search(SqList S, KeyType x)//折半查找的非递归算法//二分查找,返回有序表中大于等于x的元素位置{int low=1,high=L.length;while(low<=high){mid=(low+high)/2;if(S.elem[mid].key==x) return midelseif(S.elem[mid].key<x) high=mid-1;//x小于mid元素,则在中点前else low=mid+1;}}9.2知识点:动态查找表一、填空题1.A=① B=② C=③2. +1、-1、03. 544. 左子树右子树5. (_n-1)/2_6. O(n)7. 左子树深度减去右子树深度二、选择题1.D2.AC3.C4.C三、判断题1.×2.√3.√4. √5. ×6. √7. √8. ×9. √四、简答题1.五、算法设计题1.bool BisortTree(BiTree T){ //其中PRE为指向当前访问结点的前驱的指针。
习题第九章查找答案

第九章查找一、选择题1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为( C )。
【北京航空航天大学 2000 一、8 (2分)】A. (n-1)/2 B. n/2 C. (n+1)/2 D. n2. 对N个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为( A ) 【南京理工大学1998一、7(2分)】A.(N+1)/2 B. N/2 C. N D. [(1+N)*N ]/23. 下面关于二分查找的叙述正确的是 ( D ) 【南京理工大学 1996 一、3 (2分)】A. 表必须有序,表可以顺序方式存储,也可以链表方式存储 C. 表必须有序,而且只能从小到大排列B. 表必须有序且表中数据必须是整型,实型或字符型 D. 表必须有序,且表只能以顺序方式存储4. 对线性表进行二分查找时,要求线性表必须( B )【燕山大学 2001 一、5 (2分)】A.以顺序方式存储B.以顺序方式存储,且数据元素有序C.以链接方式存储D.以链接方式存储,且数据元素有序5.适用于折半查找的表的存储方式及元素排列要求为( D ) 【南京理工大学 1997 一、6 (2分)】A.链接方式存储,元素无序 B.链接方式存储,元素有序C.顺序方式存储,元素无序 D.顺序方式存储,元素有序6.当在一个有序的顺序存储表上查找一个数据时,即可用折半查找,也可用顺序查找,但前者比后者的查找速度( C ) A.必定快 B.不一定 C. 在大部分情况下要快 D. 取决于表递增还是递减【南京理工大学 1997 一、7 (2分)】7.当采用分快查找时,数据的组织方式为 ( B ) 【南京理工大学 1996 一、7 (2分)】A.数据分成若干块,每块内数据有序B.数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块C. 数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块D. 数据分成若干块,每块(除最后一块外)中数据个数需相同8. 二叉查找树的查找效率与二叉树的( (1)C)有关, 在 ((2)C)时其查找效率最低【武汉交通科技大学1996 一、2(4分)】(1): A. 高度 B. 结点的多少 C. 树型 D. 结点的位置(2): A. 结点太多 B. 完全二叉树 C. 呈单枝树 D. 结点太复杂。
第9章查找习题

第九章查找习题一、判断题1.折半查找法可以用于按值有序的线性链表的查找。
2.对两棵具有相同关键字集合而形状不同的二叉排序树,按中序遍历它们得到的序列的顺序是一样的。
3.任一二叉排序树的平均查找时间都小于用顺序查找法查找同样结点的线性表的平均查找时间。
4.中序遍历二叉排序树的结点就可以得到排好序的结点序列。
5.哈希表存储的基本思想是由关键码的值决定数据的存储地址。
6.哈希表的查找效率主要取决于哈希表造表时选取的哈希函数和处理冲突的方法。
7.装载因子是散列法的一个重要参数,它反映散列表的装满程度。
8.采用线性探测法处理散列时的冲突,当从哈希表删除一个记录时,不应将这个记录的所在位置置为空,因为这会影响以后的查找。
二、选择题1.采用顺序查找方法查找长度为n的线性表,平均查找长度为A.nB.n/2C.(n+1)/2D.(n-1)/22.对线性表采用折半查找法,该线性表必须A.采用顺序存储结构B.采用链式存储结构C.采用顺序存储结构,且元素按值有序D.采用链式存储结构,且元素按值有序3.在按值有序的线性表(5,8,11,12,15,20,32,41,57)中采用折半查找法查找20需要进行多少次元素间的比较A.3B.4C.5D.64.按逐点插入法建立对应于序列(54,28,16,34,73,62,95,60,26,43)的二叉排序树后,查找62要进行多少次比较。
A.2次B.3次C.5次D.6次5.散列法存储的基本思想是根据哪个来决定存储地址。
A.散列表空间B.元素的序号C.装载因子D.关键码值6.散列法存储的冲突指的是A.两个元素具有相同的序号B.两个元素的关键码值不同,而非码属性相同C.不同关键码值对应相同的存储地址D. 装载因子过大7.哈希地址空间为m,k为关键字,散列地址H(k)=k MOD p。
为了减少发生冲突的频率,一般取p为A.小于m的最大奇数B.小于m的最大合数C.小于m的最大素数D.大于m的最小素数8.在10阶B-树中根结点所包含的关键码...个数最多为_______,最少为________。
数据结构第9章练习及答案

数据结构第9章练习及答案1.顺序查找法适合于存储结构为()的线性表。
A)散列存储B)顺序存储或链接存储C)压缩存储D)索引存储【答案】B2.下面哪些操作不属于静态查找表()A)查询某个特定元素是否在表中B)检索某个特定元素的属性C)插入一个数据元素D)建立一个查找表【答案】C3.下面描述不正确的是()A)顺序查找对表中元素存放位置无任何要求,当n较大时,效率低。
B)静态查找表中关键字有序时,可用折半查找。
C)分块查找也是一种静态查找表。
D)经常进行插入和删除操作时可以采用折半查找。
4.散列查找时,解决冲突的方法有()A)除留余数法B)数字分析法C)直接定址法D)链地址法【答案】D5.若表中的记录顺序存放在一个一维数组中,在等概率情况下顺序查找的平均查找长度为()A)O(1)B)O(log2n) C)O(n) D)O(n2)【答案】C6.对长度为4的顺序表进行查找,若第一个元素的概率为1/8,第二个元素的概率为1/4,第三个元素的概率为3/8,第四个元素的概率为1/4,则查找任一个元素的平均查找长度为()A)11/8 B)7/4 C)9/4 D)11/4【答案】C【解析】对顺序表查找,ASL=,代入题目得:ASL=4*(1/8)+3*(1/4)+2*(3/8)+1*(1/4)=9/47.静态查找表与动态查找表二者的根本差别在于()A)它们的逻辑结构不一样B)施加在其上的操作不同C)所包含的数据元素的类型不一样D)存储实现不一样【答案】B8.若查找表中的记录按关键字的大小顺序存放在一个一维数组中,在等概率情况下折半法查找的平均检索长度是()A)O(n) B)O(log2n) C)O(nlog2n) D)O((log2n)2)【答案】B9.对有14个数据元素的有序表R[14](假设下标从1开始)进行二分查找,搜索到R[4]的关键码等于给定值,此时元素比较顺序依次为()。
A)R[1],R[2],R[3],R[4] B)R[1],R[13],R[2],R[3]C)R[7],R[3],R[5],R[4] D)R[7],R[4],R[2],R[3]【答案】C10.对22个记录的有序表作折半查找,当查找失败时,至少需要比较次关键字。
(完整word版)数据结构第九章查找

第九章查找:习题习题一、选择题1.散列表查找中k个关键字具有同一散列值,若用线性探测法将这k个关键字对应的记录存入散列表中,至少要进行( )次探测。
A. k B。
k+l C. k(k+l)/2 D. l+k (k+l)/22.下述命题( )是不成立的。
A。
m阶B-树中的每一个结点的子树个数都小于或等于mB。
m阶B-树中的每一个结点的子树个数都大于或等于『m/2-1C。
m阶B-树中的每一个结点的子树高度都相等D。
m阶B—树具有k个子树的非叶子结点含有(k-l)个关键字3.如果要求一个基本线性表既能较快地查找,又能适应动态变化的要求,可以采用( )查找方法.A。
分块 B. 顺序 C. 二分 D.散列4.设有100个元素,用折半查找法进行查找时,最大比较次数是( ),最小比较次数是( ).A。
7,1 B.6,l C.5,1 D. 8,15.散列表长m=15,散列表函数H(key)=key%13。
表中已有4个结点:addr(18)=5;addr(32)=6; addr(59)=7;addr(73)=8;其余地址为空,如果用二次探测再散列处理冲突,关键字为109的结点的地址是( )。
A. 8 B。
3 C. 5 D。
46.用分块查找时,若线性表中共有729个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分( )个结点最佳。
A。
15 B. 27 C。
25 D。
307.散列函数有一个共同性质,即函数值应当以( )取其值域的每个值。
A.同等概率B。
最大概率C。
最小概率D。
平均概率8.设散列地址空间为O.。
m—1,k为关键字,假定散列函数为h(k)=k%p,为了减少冲突,一般应取p为( )。
A.小于m的最大奇数B. 小于m的最大素数C.小于m的最大偶数D.小于m的最大合数9.当向一棵m阶的B-树做插入操作时,若使一个结点中的关键字个数等于( ),则必须分裂成两个结点。
A。
m B。
m-l C.m+l D。
数据结构答案_第9章_查找学习与指导上课讲义

(5)查找
在查找表中确定是否存在一个数据元素的关键字等于给定值的操作,称为查找(也称为检索)。
(6)内查找、外查找
整个查找过程全部在内存进行,则称为内查找;若在查找过程中还需要访问外存,则称为外查找。
= =5。
【例5】对含有n个互不相同元素的集合,同时找最大元素和最小元素至少需进行多少次比较?
由此可见,二分查找法的平均查找长度最小,分块查找法次之,顺序查找法平均查找长度最大。
【例4】画出对长度为20的有序表进行二分查找的判定树,并指出在等概率情况下,查找成功的平均查找长度以及查找失败时所需的最多与关键字值的比较次数。
分析:对长度为20的有序顺序表进行二分查找的判定树如图9-1所示。
图9-1判定树
数据结构答案_第9章_查找学习与指导
第
9.1知识点分析
1.基本概念
(1)查找表
由同一类型的数据元素(或记录)构成的集合称为查找表。
(2)静态查找
在查找过程中仅查找某个特定元素是否存在或它的属性的,称为静态查找。
(3)动态查找
在查找过程中对查找表进行插入元素或删除元素操作的,称为动态查找。
(4)关键字
等概率情况下的平均查找长度:
ASL=(1*1+2*2+3*4+4*8+6*5)/20=74/20=3.7
二分查找在查找失败时所需与键值比较次数不超过判定树的高度,因为判定树中度小于2的结点只可能在最下面的两层上,所以n个结点的判定树高度与n个结点的完全二叉树的高度相同,即为 。所以n个元素的有序表,查找失败时与关键字值最多比较 次。所以20个元素的有序表查找失败时最多与关键字值的比较次数为:
第九章 严蔚敏数据结构课后答案-查找
else if(key<r[mid].key) high=mid; else low=mid; } //本算法不存在查找失败的情况,不需要 return 0; }//Locate_Bin
while(p->data>key) p=p->pre; L.sp=p;
} else if(p->data<key) { while(p->data<key) p=p->next;
L.sp=p; } return p; }//Search_DSList 分析:本题的平均查找长度与上一题相同,也是 n/3.
}//while //借助中序遍历找到元素 x 及其前驱和后继结点 if(!ptr) return ERROR; //未找到待删结点 Delete_BSTree(ptr); //删除 x 结点 if(pre&&pre->rtag) pre->rchild=suc; //修改线索 return OK; }//BSTree_Delete_key
printf("a=%d\n",last); if(last<=x&&T->data>x) //找到了大于 x 的最小元素 printf("b=%d\n",T->data); last=T->data; if(T->rchild) MaxLT_MinGT(T->rchild,x); }//MaxLT_MinGT
数据结构(c语言版)题集答案——第九章_查找
*;
;
*;
} ;
{
*;
;
} ;供查找地双向循环链表类型
*( )在有序双向循环链表存储结构上地查找算法,假定每次查找都成功文档来自于网络搜索
{
;
(>>)
{
(>>) >;
;
}
(>{
(>;
;
}
;
}
分析:本题地平均查找长度与上一题相同,也是.
;
( )判断二叉树是否二叉排序树,是则返回,否则返回
{
(>) (>);
{
;
()沿分支向下查找
{
(>>[]);确定关键字所在子树
(>) ;关键字太大
>[];
}
(>[]);在叶子结点中查找
(>) ;找不到关键字
;
;
}
( )在树中插入字符串地结构见第四章文档来自于网络搜索
{
(*)(());
>;
>;建叶子结点
[];
;
(<>[([])])
{
;
>[([])];
;
}自上而下查找
(>)如果最后落到分支结点(无同义词):
(>>>)其余部分与上一题同
{
(>) >;
(>);
}
(>)
{
(>) >;
(>);
}
>;
>;
}
{
;
;
;域表示该结点地左子树地结点总数加
*,*;
} ,*;含域地平衡二叉排序树类型
中南大学数据结构与算法第9章查找课后作业答案
第9章查找习题练习答案1.对含有n个互不相同元素的集合,同时找最大元和最小元至少需进行多少次比较?答:设变量max和min用于存放最大元和最小元(的位置),第一次取两个元素进行比较,大的放入max,小的放入min。
从第2次开始,每次取一个元素先和max比较,如果大于max 则以它替换max,并结束本次比较;若小于max则再与min相比较,在最好的情况下,一路比较下去都不用和min相比较,所以这种情况下,至少要进行n-1次比较就能找到最大元和最小元。
2.若对具有n个元素的有序的顺序表和无序的顺序表分别进行顺序查找,试在下述两种情况下分别讨论两者在等概率时的平均查找长度:(1)查找不成功,即表中无关键字等于给定值K的记录;(2)查找成功,即表中有关键字等于给定值K的记录。
答:查找不成功时,需进行n+1次比较才能确定查找失败。
因此平均查找长度为n+1,这时有序表和无序表是一样的。
查找成功时,平均查找长度为(n+1)/2,有序表和无序表也是一样的。
因为顺序查找与表的初始序列状态无关。
3.画出对长度为18的有序的顺序表进行二分查找的判定树,并指出在等概率时查找成功的平均查找长度,以及查找失败时所需的最多的关键字比较次数。
答:等概率情况下,查找成功的平均查找长度为:ASL=(1+2*2+3*4+4*8+5*3)/18=3.556查找失败时,最多的关键字比较次树不超过判定树的深度,此处为5.4.为什么有序的单链表不能进行折半查找?答:因为链表无法进行随机访问,如果要访问链表的中间结点,就必须先从头结点开始进行依次访问,这就要浪费很多时间,还不如进行顺序查找,而且,用链存储结构将无法判定二分的过程是否结束,因此无法用链表实现二分查找。
5.设有序表为(a,b,c,e,f,g,i,j,k,p,q),请分别画出对给定值b,g和n进行折半查找的过程。
解:(1)查找b的过程如下(其中方括号表示当前查找区间,圆括号表示当前比较的关键字)下标: 1 2 3 4 5 6 7 8 9 10 11 12 13第一次比较: [a b c d e f (g) h i j k p q]第二次比较: [a b (c) d e f] g h i j k p q第三次比较: [a (b)]c d e f g h i j k p q经过三次比较,查找成功。
数据结构第九章查找习题及复习资料
第九章查找一、选择题1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为( )。
A. (n-1)/2 B. n/2 C. (n+1)/2 D. n2. 下面关于二分查找的叙述正确的是 ( )A. 表必须有序,表可以顺序方式存储,也可以链表方式存储 C. 表必须有序,而且只能从小到大排列B. 表必须有序且表中数据必须是整型,实型或字符型 D. 表必须有序,且表只能以顺序方式存储3. 用二分(对半)查找表的元素的速度比用顺序法( )A.必然快 B. 必然慢 C. 相等 D. 不能确定4. 具有12个关键字的有序表,折半查找的平均查找长度()A. 3.1B. 4C. 2.5D. 55.当采用分块查找时,数据的组织方式为 ( )A.数据分成若干块,每块内数据有序B.数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块C. 数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块D. 数据分成若干块,每块(除最后一块外)中数据个数需相同6. 二叉查找树的查找效率与二叉树的( (1))有关, 在 ((2))时其查找效率最低(1): A. 高度 B. 结点的多少 C. 树型 D. 结点的位置(2): A. 结点太多 B. 完全二叉树 C. 呈单枝树 D. 结点太复杂。
7. 对大小均为n的有序表和无序表分别进行顺序查找,在等概率查找的情况下,对于查找失败,它们的平均查找长度是((1)) ,对于查找成功,他们的平均查找长度是((2))供选择的答案:A. 相同的B.不同的9.分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是( ) A.(100,80, 90, 60, 120,110,130) B.(100,120,110,130,80, 60, 90)C.(100,60, 80, 90, 120,110,130)D. (100,80, 60, 90, 120,130,110)10. 在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A的左孩子的平衡因子为0右孩子的平衡因子为1,则应作( ) 型调整以使其平衡。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第九章查找 习题解答
9.5 画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平
均查找长度。
解:求得的判定树如下:
5
710
9
6
4
3
1
8
2
ASL 成功=(1+2*2+4*3+3*4)/10 =2.9 9.9
已知如下所示长度为12的表(Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec )
(1)试按表中元素的顺序依次插入一查初始为空的二叉排序树,画出插入完成之后的二
叉排序树,并求其在等概率的情况下查找成功的平均查找长度。
(2)若对表中元素先进行排序构成有序表,求在等概率的情况下对此有序表进行折半查
找时查找成功的平均查找长度。
解:(1)求得的二叉排序树如下图所示:
Jan
Feb Mar
Apr Aug Dec June July
May
Sept
Oct
Nov
在等概率情况下查找成功的平均查找长度为:
ASL 成功=(1+2*2+3*3+4*3+5*2+6*1)/12=42/12=3.5
(2)
分析:对表中元素进行排序后,其实就变成了对长度为12的有序表进行折半查找了,那么在等概率的情况下的平均查找长度只要根据折半查找的判定树就很容易求出。
长度为12的有序表进行折半查找的判定树如下图所示:
6
8
12
11
7
5
4
1
9
32
10
所以可求出:
ASL 成功=(1+2*2+4*3+5*4)/12=37/12
9.19 选取哈希函数H(k)=(3k) MOD 11。
用开放定址法处理冲突,di=i((7k)MOD 10
+1)(i=1,2,3,…)。
试在0~10的散列地址空间中对关键字序列(22,41,53,46,30,13,01,67)造哈希表,并求等概率情况下查找成功时的平均查找长度。
解:因为H(22)=0;
H(41)=2; H(53)=5; H(46)=6;
H(30)=2;H 1(30)=3; H(13)=6;H 1(13)=8;
H(01)=3;H 1(01)=0;H 2(01)=8;H 3(01)=5;H 4(01)=2;H 5(01)=10 H(67)=3;H 1(67)=2;H 2(67)=1 所以:构造的哈希表如下图所示:
并求得等概率情况下查找成功的平均查找长度为: ASL 成功=(1*4+2*2+3+6)/8=17/8
9.21 在地址空间为0~16的散列区中,对以下关键字序列构造两哈希表: (Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec ) (1)用线性探测开放定址法处理冲突; (2)用链地址法处理。
并分别求这两个哈希表在等概率情况下查找成功和不成功时的平均查找长度。
设哈希函数为H(x)=i/2取整,其中i 为关键字中第一个字母在字母表中的序号。
解:(1)因为:
H(Jan)=5; H(Feb)=3; H(Mar)=6; H(Apr)=0;
H(May)=6; H 1(May)=7;
H(June)=5;H 1(June)=6;H 2(June)=7;H 3(June)=8
H(July)=5;H 1(July)=6;H 2(July)=7;H 3(July)=8;H 4(July)=9; H(Aug)=0; H 1(Aug)=1
H(Sep)=9; H 1(Sep)=10
H(Oct)=7; H 1(Oct)=8;H 2(Oct)=9; H 3(Oct)=10; H 4(Oct)=11;
H(Nov)=7; H 1(Nov)=8;H 2(Nov)=9; H 3(Nov)=10; H 4(Nov)=11;H 5(Nov)=12; H(Dec)=2
所以,用线性探测开放定址法处理冲突构造的哈希表如下图所示:
并求得:ASL 成功=(1*5+2*3+4+5*2+6)/12=31/12
ASL 不成功=(5+4+3+2+1+9+8+7+6+5+4+3+2+1)/14=60/14 (2)用链地址法处理冲突构造的哈希表如下图所示:
并求得:
ASL 成功=(1*7+2*4+3)/12=18/12
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ASL不成功=(1*3+2*3+3)14=12/14
9.25 假设顺序表按关键字自大至小有序,试改写教科书9.1.1节中的顺序查找算法,
将监视哨设在高下标端。
然后画出描述此查找过程的判定树,分别求出等概率下查找成功和不成功的平均查找长度。
解:(1)顺序表的存储结构描述:
Typedef struct {
Keytype key;
}Elemtype; //记录类型;
typedef struct {
Elemtype *elem;
int length;
}SSTable; //顺序表类型;
按要求所得算法如下:
int Search(SSTable ST, Keytype key)
{ ST.elem[ST.length].key=key;
for (i=0; key<ST.elem[i].key; i++);
if (i==ST.length) return 0;
else if (key==ST.elem[i].key) return i;
else return 0;
}
(2)按此查找过程的判定树如下图所示:
1
2
3
n
(3)等概率下的查找成功与查找不成功的平均查找长度分别为:、
ASL成功=(1+2+3+….+n)/n=(n+1)/2
ALS不成功=(1+2+3+…+n)/(n+1)=(n+2)/2
补充:
设散列表的长度为13,散列函数为H(K)=K%13,给定的关键字序列为: 19,14,23,01,68,20,84,27,55,11,10,79。
试画出分别用拉链法和线性探查法解决冲突时所构造的散列表,并求出在等概率情况下,求这两种方法的查找成功和查找不成功的平均查找长度。
解:(1)用拉链法处理冲突:
因为:H(19)=6;H(14)=1;H(23)=10;H(01)=1;H(68)=3;H(20)=7;
H(84)=6;H(27)=1;H(55)=3;H(11)=11;H(10)=10;H(79)=1
所以,构造的哈希表如下图所示:
ASL 不成功=(4+2*3+1*2)/13=12/13 (2)用线性探测再散列法处理冲突: 因为: H(19)=6; H(14)=1; H(23)=10;
H(01)=1; H 1(01)=2; H(68)=3; H(20)=7;
H(84)=6; H 1(84)=7; H 2(84)=8;
H(27)=1;H 1(27)=2; H 2(27)=3; H 3(27)=4; H(55)=3; H 1(55)=4; H 2(55)=5; H(11)=11;
H(10)=10; H 1(10)=11; H 2(10)=12;
H(79)=1; H 1(79)=2; H 2(79)=3; H 3(79)=4; H 4(79)=5; H 5(79)=6; H 6(79)=7; H 7(79)=8; H 8(79)=9
所以,构造的哈希表如下图所示:
0 1 2 3 4 5 6 7 8 9 10 11 12
并求得:
ASL成功=(1*6+2+3*3+4+9)/12=30/12
ASL不成功=(1+13+12+11+10+9+8+7+6+5+4+3+2)/13=7。