《数据结构》-第七章 查找(习题)

第七章 查找

    对前几章这些数据结构的产生相应运算—查找。关于查找的不同算法为每年考试考查的重点,因此需要重点把握各个结构包括的查找方法及查找删除等操作的过程。对散列结构主要,应学握散列表的构造、冲突处理方法(各种方法的处理过程)、查找成功和查找失败的平均查找长度、散列查找的特征和性能分析。

    因此,在考试过程中,会涉及多种题型,同时所占分值较大,要对本章内容重点把握。

一、选择题

1.如果要求一个线性表既能较快的查找,又能适应动态变化的要求,最好采用 ( )查找法。

    A .顺序查找     B.折半查找    C.分块查找     D.哈希查找

【答案】 C 。分块查找的优点是:在表中插入和删除数据元素时,只要找到该元素对应的块,就可以在该块内进行插入和删除运算。由于块内是无序的,故插入和删除比较容易,无需进行大量移动。如果线性表既要快速查找又经常动态变化,则可采用分块查找。

2. 对 22 个记录的有序表作折半查找,当查找失败时,至少需要比较( )次关键字。

    A.3         B.4         C.5         D.6

【答案】 B 。22 个记录的有序表,其折半查找的判定树深度为⌊log₂ 22⌋ + 1=5 ,且该判定树不是满二叉树,即查找失败时至多比较 5 次,至少比较 4 次。

3. 在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为 A ,并已知A 的左孩子的平衡因子为 0 右孩子的平衡因子为 1,则应作( )型调整以使其平衡。

    A.LL        B.LR        C.RL         D.RR

【答案】C。该二叉树类似与下图,因此要进行RL调整。

《数据结构》-第七章 查找(习题)_第1张图片

4. 下列关于 m 阶 B- 树的说法错误的是( )。

    A .根结点至多有 m 棵子树

    B .所有叶子都在同一层次上

    C.非叶结点至少有 m/2 (m 为偶数 )或 m/2+1 ( m 为奇数)棵子树

    D .根结点中的数据是有序的

【答案】 D。

5. 下面关于哈希查找的说法,不正确的是( )。

    A.采用链地址法处理冲突时,查找一个元素的时间是相同的

    B.采用链地址法处理冲突时,若插入规定总是在链首,则插入任一个元素的时间是相

同的

    C.用链地址法处理冲突,不会引起二次聚集现象

    D .用链地址法处理冲突,适合表长不确定的情况

【答案】 A 。在同义词构成的单链表中,查找该单链表表中不同元素,所消耗的时间不同。

6. 设哈希表长为 14,哈希函数是 H(key)=key%11 ,表中已有数据的关键字为 15 ,38 ,61, 84 共四个,现要将关键字为 49 的元素加到表中,用二次探测法解决冲突,则放入的位置是( )。

    A.8        B.3         C.5         D.9

【答案】 D 。关键字 15 放入位置 4,关键字 38 放入位置 5,关键字 61 放入位置 6,关键字 84放入位置 7,再添加关键字 49,计算得到地址为 5,冲突,用二次探测法解决冲突得到新地址为 6,仍冲突,再用用二次探测法解决冲突,得到新地址为 4,仍冲突,再用用二次探测法解决冲突,得到新地址为 9,不冲突,即将关键字 49 放入位置 9。

7. 采用线性探测法处理冲突,可能要探测多个位置,在查找成功的情况下,所探测的这些位置上的关键字 ( )。

    A.不一定都是同义词     B.一定都是同义词

    C.一定都不是同义词     D.都相同

【答案】 A 。所探测的这些关键字可能是在处理其它关键字冲突过程中放入该位置的。

8. 由n个数据元素组成的两个表: - 一个递增有序,一个无序。采用顺序查找算法,对有序表从头开始查找,发现当前元素已不小于待查元素时,停止查找,确定查找不成功,已知查找任一元素的概率是相同的,则在两种表中成功查找( )。

    A.平均时间后者小        B.平均时间两者相同

    C.平均时间前者小        D.无法确定

【答案】B。对于顺序查找,不管线性表是有序的还是无序的,成功查找第一个元素的比较次数为1,成功查找第二个元素的比较次数为2,以此类推,即每个元素查找成功的比较次数只与其位置有关(与是否有序无关),因此查找成功的平均时间两者相同。

9. 对长度为3的顺序表进行查找,若查找第一个元素的概率为1/2,查找第二个元素的概率为1/3,查找第三个元素的概率为1/6, 则查找任-元素的平均查找长度为( )。

    A.5/3        B.2        C.7/3        D.4/3

【答案】A。在长度为3的顺序表中,查找第一个元素的查找长度为1,查找第二个元素的查找长度为2,查找第三个元素的查找长度为3,故有

10. 已知一个有序表(13, 18, 24, 35, 47, 50, 62, 83, 90, 115, 134),当二分查找值为90的元素时,查找成功的比较次数为( ).

    A. 1            B.2            C.4            D.6

【答案】B。开始时1ow指向13,high指向134,mid指向50,比较第--次90>50,所以将low指向62, high指向134, mid指向90,第二次比较找到90.

11. 具有12个关键字的有序表中,对每个关键字的查找概率相同,折半查找算法查找成功

的平均查找长度为( ), 折半查找查找失败的平均查找长度为( )。

    A. 37/12        B.35/12.        C.39/13        D.49/13

【答案】A、D。假设有序表中元素为A[0..11], 不难画出对它进行折半查找的判定树如下图所示,圆圈是查找成功结点,方形是虚构的查找失败结点。从而可以求出查找成功的ASL=(1 + 2x2 + 3x4 +4x5)/12 = 37/12,查找失败的ASL = (3x3 + 4x10)/13。

《数据结构》-第七章 查找(习题)_第2张图片

12. 对有2500个记录的索引顺序表(分块表)进行查找,最理想的块长为( )。

    A.50            B.125           C.500          D.「log2500」

【答案】A。设块长为b,索引表包含n/b项,索引表的ASL= (n/b+ 1)2,块内的ASL=(b+ 1)/2,总ASL=索引表的ASL+块内的ASL=(b+ n/b+2)2,其中对于b+ n/b,由均值不等式知b= n/b时有最小值,此时b=√n。则最理想块长为√2500= 50。.

13. 为提高查找效率,对有65025个元素的有序顺序表建立索引顺序结构,在最好情况下查

找到表中已有元素最多需要执行( ) 次关键字比较.

    A.10    B.14    C.16    D. 21

【答案】C。为使查找效率最高,每个索引块的大小应是√65025=255,为每个块建立索引,则索引表中索引项的个数为255.若对索引项和索引块内部都采用折半查找,则查找效率最高,为logx(255 +1) + log2(255+1)= 16。

14. 下列关于m阶B树的说法中,错误的是( )。

    A.根结点至多有m棵子树     

    B.所有叶结点都在同一层次上

    C.非叶结点至少有m/2 (m为偶数)或(m+1)/2 (m为奇数)棵子树

    D.根结点中的数据是有序的

【答案】C。除根结点外的所有非终端结点至少有⌈m/2 ⌉棵子树。对于根结点,最多有m棵子树,若其不是叶结点,则至少有2棵子树。

15. 具有n个关键字的m阶B树,应有( )个叶结点。

    A. n+1        B.n-1        C. mn        D. nm/2

【答案】A。B树的叶结点对应查找失败的情况,对有n个关键字的查找集合进行查找,失败可能性有n+1种。

16. 在一棵高度为2的5阶B树中,所含关键字的个数至少是( ).

    A.5            B.7            C.8            D.14

【答案】A。对于5阶B树,根结点只有达到5个关键字时才能产生分裂,成为高度为2的B树,因此高度为2的5阶B树所含关键字的个数最少是5。

17. 在一棵具有15 个关键字的4阶B树中,含关键字的结点个数最多是( )。

    A.5            B.6            C.10            D.15

【答案】D。关键字数量不变,要求结点数量最多,即要求每个结点中含关键字的数量最少。根据4阶B树的定义,根结点最少含1个关键字,非根结点中最少含[4/21 -1 = 1个关键字,所以每个结点中关键字数量最少都为1个,即每个结点都有2个分支,类似于排序二叉树,而15个结点正好可以构造一个4层的4阶B树,使得叶结点全在第四层,符合B树的定义,因此选D。

18. 已知一棵3阶B树中有2047个关键字,则此B树的最大高度为( ), 最小高度为( )。

    A.11                B.10               C.8               D.7

【答案】A、D。

19. 下列应用中,适合使用B+树的是( ).

    A.编译器中的词法分析               B.关系数据库系统中的索引

    C.网络中的路由表快速查找        D.操作系统的磁盘空闲块管理

【答案】B。B+树是应文件系统所需而产生的B树的变形,前者比后者更加适用于实际应用中的操作系统的文件索引和数据库索引,因为前者的磁盘读写代价更低,查询效率更加稳定。编译器中的词法分析使用有穷自动机和语法树。网络中的路由表快速查找主要靠高速缓存、路由表压缩技术和快速查找算法。系统一般使用空闲空间链表管理磁盘空闲块。所以选项B正确。

20. 高度为5的3阶B树含有的关键字个数至少是( )。

    A.15                B.31                C.62                D.242

【答案】B。m阶B树的基本性质: ,根结点以外的非叶结点最少含有⌈m/2 ⌉- 1个关键字,代入m=3得到每个非叶结点中最少包含1个关键字,而根结点含有1个关键字,因此所有非叶结点都有两个孩子。此时其树形与h= 5的满二叉树相同,可求得关键字最少为31个。

21. 只能在顺序存储结构.上进行的查找方法是( )。

    A.顺序查找法            B.折半查找法            C.树型查找法            D.散列查找法

【答案】B。顺序查找可以是顺序存储或链式存储:折半查找只能是顺序存储且要求关键字有序;树形查找法要求采用树的存储结构,既可以采用顺序存储也可以采用链式存储;散列查找中的链地址法解决冲突时,采用的是顺序存储与链式存储相结合的方式。

22. 在开放定址法中散列到同一个地址而引起的“堆积”问题是由于( )引起的。

    A.同义词之间发生冲突                                    B.非同义词之间发生冲突

    C.同义词之间或非同义词之间发生冲突            D.散列表“溢出”

【答案】C。在开放定址法中散列到同一个地址而产生的"堆积”问题,是同义词冲突的探查序列和非同义词之间不同的探查序列交织在- -起,导致关键字查询需要经过较长的探测距离,降低了散列的效率。因此要选择好的处理冲突的方法来避免“堆积”。

23. 下列关于散列冲突处理方法的说法中,正确的有( ).

I. 采用再散列法处理冲突时不易产生聚集

II.采用线性探测法处理冲突时,所有同义词在散列表中一定相邻

II.采用链地址法处理冲突时,若限定在链首插入,则插入任一个元素的时间是相同的

IV.采用链地址法处理冲突易引起聚集现象

A. I和II                B.I、II和III                C.III和IV                D. I和IV

【答案】A。利用再散列法处理冲突时,按一定的距离,跳跃式地寻找“下一个”空闲位置,减少了发生聚集的可能,I正确。散列地址i的关键字,和为解决冲突形成的某次探测地址为i的关键字,都争夺地址i,i+ 1,…,因此不-定相邻,II 错误。III 正确。同义词冲突不等于聚集,链地址法处理冲突时将同义词放在同-一个链表中,不会引起聚集现象,IV错误。

24. 采用开放定址法解决冲突的散列查找中,发生聚集的原因主要是( ).

    A.数据元素过多        B.负载因子过大        C.散列函数选择不当        D.解决冲突的方法选择不当

【答案】D。聚集是因选取不当的处理冲突的方法,而导致不同关键字的元素对同-散列地址进行争夺的现象。用线性再探测法时,容易引发聚集现象。

25.现有长度为11 且初始为空的散列表Ht,散列函数是H (key) =key7, 采用线性探查(线性探测再散列)法解决冲突。将关键字序列87, 40, 30,6, 11, 22, 98, 20依次插入HT后,HT查找失败的平均查找长度是( ).

    A.4                    B.5.25                    C.6                    D.6.29

【答案】C。采用线性探查法计算每个关键字的存放情况如下表所示:

由于H(key) = 0~6,查找失败时可能对应的地址有7个,对于计算出地址为0的关键字key0,只有比较完0~8号地址后才能确定该关键字不在表中,比较次数为9;对于计算出地址为1的关键字key1,只有比较完1~8号地址后才能确定该关键字不在表中,比较次数为8;以此类推。需要特别注意的是,散列函数不可能计算出地址7,因此有ASL失败=(9+8+7+6+5+4+3)/7= 6

26. 下列排序算法中,( )算法可能会出现下面情况:在最后一趟开始之前,所有元素都不在其最终的位置上。

    A. 堆排序            B. 冒泡排序             C. 快速排序             D. 插入排序

【答案】D。插入排序可能在最后一趟使所有元素移动。堆排序、冒泡排序、快速排序每次都可确定下一个元素的位置

27. 对 n 个记录的线性表进行快速排序为减少算法的递归深度,以下叙述正确的是( )。

    A.每次分区后,先处理较短的部分         B.每次分区后,先处理较长的部分

    C.与算法每次分区后的处理顺序无关     D.以上三者都不对

【答案】A。在快速排序中,需要使用递归来分别处理左右子段,递归深度可以理解为系统栈保存的深度,先处理短的分段再处理长的分段,可以减少时间复杂度;如果按长的递归优先的话,那么短的递归会一直保存在栈中,直到长的处理完。短的优先的话,长的递归调用没有进行,他是作为一个整体保存在栈中的,所以递归栈中的保留的递归数据少一些。

28. 堆排序是( )类排序,堆排序平均执行的时间复杂度和需要附加的存储空间复杂度分别是( )。

    A. 插入           B. 交换             C. 归并            D. 基数             E. 选择

    F. O(n2)和 O(1)              G. O(nlog2n)和 O(1)

    H. O(nlog2n)和 O(n)        I. O(n2)和 O(n)

【答案】E、G。

29. 在排序算法中每一项都与其它各项进行比较,计算出小于该项的项的个数,以确定该项的位置叫( )。

    A.插入排序         B.枚举排序         C.选择排序         D.交换排序

【答案】B。

30. 基于比较方法的 n 个数据的内部排序。最坏情况下的时间复杂度能达到的最好下界是( )。

    A. O(nlogn)         B. O(logn)         C. O(n)         D. O(n*n)

【答案】A。

二、判断题

1. 顺序查找法适用于存储结构为顺序或链接存储的线性表。( )

【答案】√。

2. 对大小均为 n 的有序表和无序表分别进行顺序查找,在等概率查找的情况下,对于查找成功,它们的平均查找长度是相同的,而对于查找失败,它们的平均查找长度是不同的。( )

【答案】√。在等概率情况下,这种说法是成立的。

3. n 个数存放在一维数组 A[1..n]中,在进行顺序查找时,这 n 个数的排列有序或无序其平均查找长度不同。( )

【答案】×。未指出在成功还是不成功时的查找长度。

三、填空题

1.                  法构造的哈希函数肯定不会发生冲突。

【答案】直接定址法。

2. 高度为 8 的平衡二叉树的结点数至少有              个 。

【答案】54。高度为1的平衡二叉树的结点数至少有​​​​​​1个 ;高度为2的平衡二叉树的结点数至少有​​​​​​2个 ;高度为3的平衡二叉树的结点数至少有​​​​​​4个 ;高度为4的平衡二叉树的结点数至少有​​​​​​7个 ;高度为5的平衡二叉树的结点数至少有​​​​​​12个 ;高度为6的平衡二叉树的结点数至少有​​​​​​20个 ...规律为A(n)+A(n+1)+1=A(n+2),因此高度为8的平衡二叉树的结点至少有54个。

3. 不受待排序初始序列的影响,时间复杂度为 O(N2)的排序算法是 ,在排 序算法的最后一趟开始之前,所有元素都可能不在其最终位置上的排序算法是_____。

【答案】简单排序;选择排序。

4. 直接插入排序用监视哨的作用是_____ 。

【答案】免去查找过程中每一步都要检测整个表是否查找完毕,提高了查找效率。

5. 查找是非数值程序设计的一个重要技术问题,基本上分成_____,_____和_____。处理哈希冲突的方法有_____ 、_____ 、_____和_____。

【答案】顺序表查找;树表查找;哈希表查找;开放定址方法;链地址方法;再哈希法;建立公共溢出区。

四、综合应用题

1. 假定对有序表: ( 3, 4, 5, 7, 24, 30, 42 , 54, 63 , 72 , 87, 95)进行折半查找,试回答下列问题:

    ① 画出描述折半查找过程的判定树;

    ② 若查找元素 54 ,需依次与哪些元素比较?

    ③ 若查找元素 90 ,需依次与哪些元素比较?

    ④ 假定每个元素的查找概率相等,求查找成功时的平均查找长度。

【答案】① 先画出判定树如下(注: mid= (1+12)/2 =6):

 《数据结构》-第七章 查找(习题)_第3张图片

    ② 查找元素 54 ,需依次与 30, 63, 42, 54 元素比较;

    ③ 查找元素 90 ,需依次与 30, 63,87, 95 元素比较;

    ④ 求 ASL 之前,需要统计每个元素的查找次数。判定树的前 3 层共查找1+2×2+4×3=17 次;但最后一层未满,不能用8×4,只能用5×4=20 次,所以 ASL=1/12 (17+20)= 37/12 ≈ 3.08

2. 对图所示的 3 阶 B- 树,依次执行下列操作,画出各步操作的结果。

    ① 插入 90; ② 插入 25 ;③ 插入 45 ;④ 删除 60;⑤删除80。

《数据结构》-第七章 查找(习题)_第4张图片

【答案】①该树为3阶B-树,所以每个结点中最多有2个关键字,90可直接插入100所在的结点中,如图:

《数据结构》-第七章 查找(习题)_第5张图片

    ②3阶B-树最多有3个结点,而20<25<30,所以将25插入8与20所在结点。但此时关键字字数>2,需要中间值上提至上一层,中间值左右两边分裂,如图:

《数据结构》-第七章 查找(习题)_第6张图片

    ③因40<45<50,所以将45插入35与40所在结点。但此时关键字字数>2,需要中间值上提至上一层,中间值左右两边分裂,结果为:

《数据结构》-第七章 查找(习题)_第7张图片

    但此时第二层的关键字个数>2,因此中间值30需要向上提,如图:

《数据结构》-第七章 查找(习题)_第8张图片

    ④删除60后,60所在结点个数<1,同时60的兄弟结点个数≥2,其兄弟结点90上移至上一层,同时80下移作为第三层结点,结果如图:

《数据结构》-第七章 查找(习题)_第9张图片

    ⑤删除80后,60所在结点个数<1,同时60的兄弟结点个数=1,将上层结点拉下来与兄弟结点合并,结果如图:

《数据结构》-第七章 查找(习题)_第10张图片

3. 设哈希表的地址范围为 0~ 17,哈希函数为: H( key )=key%16 。用线性探测法处理冲突,输入关键字序列:( 10, 24,32 ,17, 31, 30, 46 ,47, 40, 63,49),构造哈希表,试回答下列问题:

    ① 画出哈希表的示意图;

    ② 若查找关键字 63,需要依次与哪些关键字进行比较?

    ③ 若查找关键字 60,需要依次与哪些关键字比较?

    ④ 假定每个关键字的查找概率相等,求查找成功时的平均查找长度。

【答案】① 画表如下:

    ② 查找 63, 首先要与 H(63)=63%16=15 号单元内容比较,即 63 与 31 比较 , 不匹配 ; 然后顺移,与 46,47,32,17,63 相比,一共比较了 6 次!

    ③ 查找 60, 首先要与 H(60)=60%16=12 号单元内容比较,但因为 12 号单元为空(应当有空标记) ,所以应当只比较这一次即可。

    ④ 对于黑色数据元素,各比较 1 次;共 6 次;对红色元素则各不相同,要统计移位的位数。 “ 63 ”需要 6 次,“ 49”需要 3 次,“ 40”需要 2 次,“ 46 ”需要 3 次,“ 47 ”需要 3 次,所以 ASL=1/11 ( 6+2+3×3+6 )= 23/11。

4. 设有一组关键字 ( 9,01,23 ,14 ,55,20,84,27),采用哈希函数: H( key )=key %7 ,表长为 10,用开放地址法的二次探测法处理冲突。要求:对该关键字序列构造哈希表,并计算查找成功的平均查找长度。

【答案】构造哈希表如下所示:

《数据结构》-第七章 查找(习题)_第11张图片

    平均查找长度: ASLsucc =( 1+1+1+2+3+4+1+2 ) /8=15/8。

    以关键字 27 为例: H( 27 ) =27%7=6(冲突) H 1=( 6+1 ) %10=7(冲突)

    H2=( 6+2 2) %10=0(冲突) H 3=( 6+3 3) %10=5 所以比较了 4 次。

四、算法题

1. 试写出折半查找的递归算法。

2. 试写一个判别给定二叉树是否为二叉排序树的算法。

3. 假设一棵平衡二叉树的每个结点都表明了平衡因子 b,试设计一个算法,求平衡二叉树的高度。

你可能感兴趣的:(数据结构,数据结构,二分查找)