线性探测再散列查找成功和不成功的相关问题
数据结构第九、十章作业答案

数据结构第九、⼗章作业答案第九章查找⼀、填空题1. 在数据的存放⽆规律⽽⾔的线性表中进⾏检索的最佳⽅法是顺序查找(线性查找)。
2. 线性有序表(a 1,a 2,a 3,…,a 256)是从⼩到⼤排列的,对⼀个给定的值k ,⽤⼆分法检索表中与k 相等的元素,在查找不成功的情况下,最多需要检索 8 次。
设有100个结点,⽤⼆分法查找时,最⼤⽐较次数是 7 。
3. 假设在有序线性表a[1..20]上进⾏折半查找,则⽐较⼀次查找成功的结点数为1;⽐较两次查找成功的结点数为 2 ;⽐较四次查找成功的结点数为 8 ,其下标从⼩到⼤依次是1,3,6,8,11,13,16,19______,平均查找长度为 3.7 。
解:显然,平均查找长度=O (log 2n )<5次(25)。
但具体是多少次,则不应当按照公式)1(log 12++=n n n ASL 来计算(即(21×log 221)/20=4.6次并不正确!)。
因为这是在假设n =2m -1的情况下推导出来的公式。
应当⽤穷举法罗列:全部元素的查找次数为=(1+2×2+4×3+8×4+5×5)=74; ASL =74/20=3.74.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素 28,6,12,20 ⽐较⼤⼩。
5. 在各种查找⽅法中,平均查找长度与结点个数n ⽆关的查找⽅法是散列查找。
6. 散列法存储的基本思想是由关键字的值决定数据的存储地址。
7. 有⼀个表长为m 的散列表,初始状态为空,现将n (n8、设⼀哈希表表长M 为100 ,⽤除留余数法构造哈希函数,即H (K )=K MOD P (P<=M ), 为使函数具有较好性能,P 应选( 97 )9、在各种查找⽅法中,平均查找长度与结点个数⽆关的是哈希查找法10、对线性表进⾏⼆分查找时,要求线性表必须以顺序⽅式存储,且结点按关键字有序排列。
计算机学科专业基础综合数据结构-7

计算机学科专业基础综合数据结构-7(总分:100.00,做题时间:90分钟)一、单项选择题(总题数:28,分数:74.00)1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为______。
(分数:2.00)A.(n-1)/2B.n/2C.(n+1)/2 √D..n解析:[解析] 此结论需要考生当作定理一样的牢记。
顺序查找法适用于查找顺序存储或链式存储的线性表,平均比较次数为______,二分法查找只适用于查找顺序存储的有序表,平均比较次数为______。
在此假定N为线性表中结点数,且每次查找都是成功的。
(分数:4.00)A.N+1B.2log2NC.log2ND.N/2 √E.Nlog2NF..N2解析:A.N+1B.2log2NC.log2N √D.N/2E.Nlog2NF..N2解析:2.下面关于二分查找的叙述正确的是______。
(分数:2.00)A.表必须有序,表可以顺序方式存储,也可以链表方式存储B.表必须有序且表中数据必须是整型、实型或字符型C.表必须有序,而且只能从小到大排列D.表必须有序,且表只能以顺序方式存储√解析:二叉查找树的查找效率与二叉树的______有天,在______时查找效率最低。
(分数:4.00)A.高度B.结点的多少C.树形√D.结点的位置解析:A.结点太多B.完全二叉树C.呈单枝树√D.结点太复杂解析:3.当采用分块查找时,数据的组织方式为______。
(分数:2.00)A.数据分成若干块,每块内数据有序B.数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块√C.数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块D.数据分成若干块,每块(除最后一块外)中数据个数需相同解析:[解析] 本题主要考查分块查找的相关概念。
4.如果要求一个线性表既能较快地查找,又能适应动态变化的要求,可以采用下列哪一种查找方法?______ (分数:2.00)A.分块√B.顺序C.二分法D.哈希解析:[解析] 由于题目只说明是线性表,因此排除二分法。
哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度

哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度⼀、哈希表1、概念哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)⽽直接进⾏访问的数据结构。
它通过把关键码值映射到哈希表中的⼀个位置来访问记录,以加快查找的速度。
这个映射函数就做散列函数,存放记录的数组叫做散列表。
2、散列存储的基本思路以数据中每个元素的关键字K为⾃变量,通过散列函数H(k)计算出函数值,以该函数值作为⼀块连续存储空间的的单元地址,将该元素存储到函数值对应的单元中。
3、哈希表查找的时间复杂度哈希表存储的是键值对,其查找的时间复杂度与元素数量多少⽆关,哈希表在查找元素时是通过计算哈希码值来定位元素的位置从⽽直接访问元素的,因此,哈希表查找的时间复杂度为O(1)。
⼆、常⽤的哈希函数1. 直接寻址法取关键字或者关键字的某个线性函数值作为哈希地址,即H(Key)=Key或者H(Key)=a*Key+b(a,b为整数),这种散列函数也叫做⾃⾝函数.如果H(Key)的哈希地址上已经有值了,那么就往下⼀个位置找,知道找到H(Key)的位置没有值了就把元素放进去.2. 数字分析法分析⼀组数据,⽐如⼀组员⼯的出⽣年⽉,这时我们发现出⽣年⽉的前⼏位数字⼀般都相同,因此,出现冲突的概率就会很⼤,但是我们发现年⽉⽇的后⼏位表⽰⽉份和具体⽇期的数字差别很⼤,如果利⽤后⾯的⼏位数字来构造散列地址,则冲突的⼏率则会明显降低.因此数字分析法就是找出数字的规律,尽可能利⽤这些数据来构造冲突⼏率较低的散列地址.3. 平⽅取中法取关键字平⽅后的中间⼏位作为散列地址.⼀个数的平⽅值的中间⼏位和数的每⼀位都有关。
因此,有平⽅取中法得到的哈希地址同关键字的每⼀位都有关,是的哈希地址具有较好的分散性。
该⽅法适⽤于关键字中的每⼀位取值都不够分散或者较分散的位数⼩于哈希地址所需要的位数的情况。
4. 折叠法折叠法即将关键字分割成位数相同的⼏部分,最后⼀部分位数可以不同,然后取这⼏部分的叠加和(注意:叠加和时去除进位)作为散列地址.数位叠加可以有移位叠加和间界叠加两种⽅法.移位叠加是将分割后的每⼀部分的最低位对齐,然后相加;间界叠加是从⼀端向另⼀端沿分割界来回折叠,然后对齐相加.5. 随机数法选择⼀个随机数,去关键字的随机值作为散列地址,通常⽤于关键字长度不同的场合.6. 除留余数法取关键字被某个不⼤于散列表表长m的数p除后所得的余数为散列地址.即H(Key)=Key MOD p,p<=m.不仅可以对关键字直接取模,也可在折叠、平⽅取中等运算之后取模。
第八章习题

第八章习题8.1 若对大小均为n的有序的顺序表和无序的顺序表分别进行查找,试在下列三种情况下分别讨论两者在等概率时的平均查找长度是否相同?(1)查找不成功,即表中没有关键字等于给定值K的记录。
(2)查找成功且表中只有一个关键字等于给定值K的记录。
(3)查找成功且表中有若干个关键字等于给定值K的记录,一次查找要求找出所有记录。
8.2画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平均查找长度。
8.3试推导含12个结点的平衡二叉树的最大深度并画出一棵这样的树。
8.4试从空树开始,画出按以下次序向2-3树(即3阶B-树)中插入关键码的建树过程:20,30,50,52,60,68,70。
如果此后删除50和68,画出每一步执行后2-3树的状态。
8.5选取哈希函数H(k)=(3k)%11,用线性探测再散列法处理冲突。
试在0~10的散列地址空间中,对关键字序列(22,41,53,46,30,13,01,67)构造哈希表,并求等概率情况下查找成功与不成功时的平均查找长度。
8.6试为下列关键字建立一个装载因子不小于0.75的哈希表,并计算你所构造的哈希表的平均查找长度。
(ZHAO,QIAN,SUN,LI,ZHOU,WU,ZHENG,WANG,CHANG,CHAO,YANG,JIN)8.7试编写利用折半查找确定记录所在块的分块查找算法。
8.8试写一个判别给定二叉树是否为二叉排序树的算法。
设此二叉树以二叉链表作存储结构,且树中结点的关键字均不同。
8.9编写算法,求出指定结点在给定的二叉排序树中所在的层数。
8.10 编写算法,在给定的二叉排序树上找出任意两个不同结点的最近公共祖先(若在两结点A、B中,A是B的祖先,则认为A是A、B的最近公共祖先)。
8.11 编写一个函数,利用二分查找算法在一个有序表中插入一个元素x,并保持表的有序性。
8.12 已知长度为12的表:(Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec)。
《数据结构》习题集:第9章查找(第1次更新2019-5)

第9章查找一、选择题1.顺序查找一个共有n个元素的线性表,其时间复杂度为(),折半查找一个具有n个元素的有序表,其时间复杂度为()。
【*,★】A.O(n)B. O(log2n)C. O(n2)D. O(nlog2n)2.在对长度为n的顺序存储的有序表进行折半查找,对应的折半查找判定树的高度为()。
【*,★】A.nB.C.D.3.采用顺序查找方式查找长度为n的线性表时,平均查找长度为()。
【*】A.nB. n/2C. (n+1)/2D. (n-1)/24.采用折半查找方法检索长度为n的有序表,检索每个元素的平均比较次数()对应判定树的高度(设高度大于等于2)。
【**】A.小于B. 大于C. 等于D. 大于等于5.已知有序表(13,18,24,35,47,50,62,83,90,115,134),当折半查找值为90的元素时,查找成功的比较次数为()。
【*】A. 1B. 2C. 3D. 46.对线性表进行折半查找时,要求线性表必须()。
【*】A.以顺序方式存储B. 以链接方式存储C.以顺序方式存储,且结点按关键字有序排序D. 以链接方式存储,且结点按关键字有序排序7.顺序查找法适合于存储结构为()的查找表。
【*】A.散列存储B. 顺序或链接存储C. 压缩存储D. 索引存储8.采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分()个结点最佳。
【**】A.10B. 25C. 6D. 6259.从键盘依次输入关键字的值:t、u、r、b、o、p、a、s、c、l,建立二叉排序树,则其先序遍历序列为(),中序遍历序列为()。
【**,★】A.abcloprstuB. alcpobsrutC. trbaoclpsuD. trubsaocpl10.折半查找和二叉排序树的时间性能()。
【*】A.相同B. 不相同11.一棵深度为k的平衡二叉树,其每个非终端结点的平衡因子均为0,则该树共有()个结点。
数据结构 第九章查找

第九章查找:习题习题一、选择题1.散列表查找中k个关键字具有同一散列值,若用线性探测法将这k个关键字对应的记录存入散列表中,至少要进行( )次探测。
A. kB.k+lC. k(k+l)/2D. 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,1B.6,lC.5,1D. 8,15.散列表长m=15,散列表函数H(key)=key%13。
表中已有4个结点:addr(18)=5;addr(32)=6; addr(59)=7; addr(73)=8;其余地址为空,如果用二次探测再散列处理冲突,关键字为109的结点的地址是( )。
A. 8B. 3C. 5D. 46.用分块查找时,若线性表中共有729个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分( )个结点最佳。
A. 15B. 27C. 25D. 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.mB. m-lC.m+lD.[m+1]10.当向一棵m阶的B壤f做删除操作时,若使一个结点中的关键字个数等于( ),则可能需要用它的左兄弟或右兄弟结点合并成一个结点。
计算机学科专业基础综合数据结构-7

计算机学科专业基础综合数据结构-7一、单项选择题(总题数:28,分数:74.00)1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为______。
A.(n-1)/2B.n/2C.(n+1)/2 √D..n此结论需要考生当作定理一样的牢记。
顺序查找法适用于查找顺序存储或链式存储的线性表,平均比较次数为______,二分法查找只适用于查找顺序存储的有序表,平均比较次数为______。
在此假定N为线性表中结点数,且每次查找都是成功的。
(分数:4.00)A.N+1B.2log2NC.log2ND.N/2 √E.Nlog2NF..N2A.N+1B.2log2NC.log2N √D.N/2E.Nlog2NF..N22.下面关于二分查找的叙述正确的是______。
A.表必须有序,表可以顺序方式存储,也可以链表方式存储B.表必须有序且表中数据必须是整型、实型或字符型C.表必须有序,而且只能从小到大排列D.表必须有序,且表只能以顺序方式存储√二叉查找树的查找效率与二叉树的______有天,在______时查找效率最低。
(分数:4.00)A.高度B.结点的多少C.树形√D.结点的位置A.结点太多B.完全二叉树C.呈单枝树√D.结点太复杂3.当采用分块查找时,数据的组织方式为______。
A.数据分成若干块,每块内数据有序B.数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块√C.数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块D.数据分成若干块,每块(除最后一块外)中数据个数需相同本题主要考查分块查找的相关概念。
4.如果要求一个线性表既能较快地查找,又能适应动态变化的要求,可以采用下列哪一种查找方法?______A.分块√B.顺序C.二分法D.哈希由于题目只说明是线性表,因此排除二分法。
哈希算法虽然有最快的查找效率,但建立哈希表无法适应动态变化的要求。
习题9解答

习题9解答判断题:1.用向量和单链表表示的有序表均可使用折半查找方法来提高查找速度。
答:FALSE (错。
链表表示的有序表不能用折半查找法。
)2.有n 个数据放在一维数组A[1..n]中,在进行顺序查找时,这n 个数的排列有序或无序其平均查找长度不同。
答:FALSE (错。
因顺序查找既适合于有序表也适合于无序表;对这两种表,若对于每个元素的查找概率相等,则顺序查找的ASL 相同,并且都是(n+1)/2;对于查找概率不同的情况,则按查找概率由大到小排序的无序表其ASL 要比有序表的ASL 小。
)3.折半查找是先确定待查有序表记录的范围,然后逐步缩小范围,直到找到或找不到该记录为止。
( )答:TRUE4.哈希表的查找效率主要取决于哈希表哈希表造表时选取的哈希函数和处理冲突的方法。
答:TRUE5.查找表是由同一类型的数据元素(或记录)构成的集合。
答:TRUE单选题:6.对于18个元素的有序表采用二分(折半)查找,则查找A[3]的比较序列的下标为( )。
A. 1、2、3B. 9、5、2、3C. 9、5、3D.9、4、2、3 答:D (第一次⎣⎦2/)181(+ = 9,第二次⎣⎦2/)81(+ = 4,第三次⎣⎦2/)31(+ = 2, (第四次⎣⎦2/)33(+ = 3,故选D.7. 顺序查找法适合于存储结构为____________的线性表。
A.散列存储B.顺序存储或链式存储C.压缩存储D.索引存储答:B8.对线性表进行二分查找时,要求线性表必须( )。
A .以顺序方式存储 B. 以链接方式存储C .以顺序方式存储,且结点按关键字有序排序D. 以链接方式存储,且结点按关键字有序排序答:C9.设哈希表长m=14,哈希函数为H(k) = k MOD 11。
表中已有4个记录(如下图所示),如果用二次探测再散列处理冲突,关键字为49的记录的存储地址是( )。
答:D (计算H(k),即H(49)=49 mod 11 = 5,冲突,进行二次探测再散列。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性探测再散列法查找成功和查找不成功的平均查找长度Question1:
将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。
散列表的存储空间是一个下标从0开始的一维数组,散列函数为:H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。
(1) 请画出所构造的散列表。
(2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。
Ans:
(1).首先明确一个概念装载因子,装载因子是指所有关键子填充哈希表后饱和的程度,它等于关键字总数/哈希表的长度。
根据题意,我们可以确定哈希表的长度为L = 7/0.7 = 10;因此此题需要构建的哈希表是下标为0~9的一维数组。
根据散列函数可以得到如下散列函数值表。
H(Key) = (keyx3) MOD 7, 例如key=7时,H(7) = (7x3)%7 = 21%7=0,其他关键字同理。
Key 7 8 30 11 18 9 14
H(Key) 0 3 6 5 5 6 0
(表1)
采用线性探测再散列法处理冲突,所构造的散列表为:
地址0 1 2 3 4 5 6 7 8 9
关键字7 14 8 11 30 18 9
(表2)
下面对散列表的构造方式加以说明,注意表1中的关键字7和14,30和9,11和18,这三组关键子的H(Key)值相同,这在构建散列表时就会产生冲突,因为他们的地址相同,所
以要通过一定的冲突处理方法来解决这个问题。
依题,采用线性探测再散列法处理冲突。
下面详细介绍如何构建散列表:
第一个key 7,它的地址是0,因此放到散列表的数组下表为0的位置,这个位置上没有关键字,因此没有冲突可以直接填入;
第二个key 8,它的地址是3,因此放到散列表的数组下表为3的位置,这个位置上没有关键字,因此没有冲突可以直接填入;
第三个key 30,它的地址是6,因此放到散列表的数组下表为6的位置,这个位置上没有关键字,因此没有冲突可以直接填入;
第四个key 11,它的地址是5,因此放到散列表的数组下表为5的位置,这个位置上没有关键字,因此没有冲突可以直接填入;
第五个key 18,它的地址是5,因此放到散列表的数组下表为5的位置,但这个位置上已经有关键字11,遇到了冲突,此时我们根据线性探测再散列法来处理这个冲突,探测下一个位置6, 6这个位置上已经存在关键字30则继续增加步长1,因此现在的新地址应为7,位置7上没有关键字,放入即可,到此冲突已经解决;
第六个key 9,它的地址是6,因此放到散列表的数组下表为6的位置,但这个位置上已经有关键字30,遇到了冲突,探测下一个位置7, 7这个位置上已经存在关键字18则继续增加步长1,因此现在的新地址应为8,位置8上没有关键字,放入即可;
第七个key 14,它的地址是0,因此放到散列表的数组下表为0的位置,但这个位置上已经有关键字7,遇到了冲突,探测下一个位置1, 位置1上没有关键字,放入即可;
到这一步所有关键字均已填入,散列表已经构造完成,如表2所示。
(2)等概率情况下查找成功平均查找长度:
这一问可以根据第一问的构造过程求解:
key7一次就填入了表中,因此查找次数为1,同理8,30,11查找次数均为1;key18 进行了3次放入操作,探测位置分别是5,6,7 ,因此查找次数为3;key9也是3次;key14 进行了两次探测,因此查找次数为2。
次数表如表3所示
Key 7 8 30 11 18 9 14
Count 1 1 1 1 3 3 2
(表3)
所以ASLsuccess= (1+1+1+1+3+3+2)/ 7 = 12/7。
等概率情况下查找不成功的平均查找长度:
接下来讨论不成功的情况, 看表2,计算查找不成功的次数就直接找关键字到第一个地址上关键字为空的距离即可,但根据哈希函数地址为MOD7,因此初始只可能在0~6的位置。
等概率情况下,查找0~6位置查找失败的查找次数为:
看地址0,到第一个关键字为空的地址2的距离为3,因此查找不成功的次数为3.
地址1,到第一个关键为空的地址2的距离为2,因此查找不成功的次数为2.
地址2,到第一个关键为空的地址2的距离为1,因此查找不成功的次数为1.
地址3,到第一个关键为空的地址4的距离为2,因此查找不成功的次数为2.
地址4,到第一个关键为空的地址4的距离为1,因此查找不成功的次数为1.
地址5,到第一个关键为空的地址2(注意不是地址9,因为初始只可能在0~6之间,因此循环回去)的距离为5,因此查找不成功的次数为5.
地址6,到第一个关键为空的地址2(注意不是地址9,因为初始只可能在0~6之间,因此循环回去)的距离为4,因此查找不成功的次数为4.
因此查找不成功的次数表如下表所示
Key 7 8 30 11 18 9 14
Count 3 2 1 2 1 5 4
(表4)
所以ASLunsuccess= (3+2+1+2+1+5+4)/ 7 = 18/7。