数据结构-查找篇

数据结构-查找篇:


内容:

  1. 思维导图(基于教材)
  2. 错题复盘+计算题(基于习题解析)

1.思维导图

在这里插入图片描述


2.错题复盘+计算题

1 对n个元素的表进行顺序查找时,若查找每个元素的概率相同,则平均查找长度为(C)

A.(n-1)/2 B.n/2 C.(n+1)/2 D.n
解析:书上结论

2 折半查找有序表{4,6,10,12,20,30,50,70,88,100}。若查找表中元素58,则它将依次与表中(A)比较大小,查找结果是失败

A.20,70,30,50 B.30,88,70,50 C.20,50 D.30,88,50
解析:有序表中一共有10个元素,使用折半查找时,第一个位置=向下取整(1+10)/2=5,即待查找元素与第5个元素比较大小,如果待查找元素比第5个元素大,那么下限=5+1,反之上限=5-1,上下限均指向同一个位置时,查找失败。58>20,所以下一个要比较的位置=向下取整(6+10)/2=8,58<70,所以下一个要比较的位置=向下取整(6+7)/2=6,58>30,所以下一个要比较的位置=向下取整(7+7)/2=7,58!=50,所以查找失败

3 对22个记录的有序表进行折半查找,当查找失败时,至少需要比较(B)次关键字

A.3 B.4 C.5 D.6
解析:折半查找判定树深度为向下取整[log2 22]+1=5,且不是满二叉树,所以查找失败时最多比较5次,最少比较4次

4 设散列表长为14,散列函数是H(key)=key%11,表中已有数据的关键字为15、38、61、84,现要将关键字为49的元素存储到表中,用二次探测法解决冲突,则放入的位置是()

A.8 B.3 C.5 D.9
解析:首先,把已有数据的关键字位置算出来:15%11=4,38%11=5,61%11=6,84%11=7然后再算49的位置:49%11=5,冲突了,题目说要用二次探测法,那么49%11+1^2=6还是冲突,49%11-1^2=4还是冲突,49%11+2^2=9没冲突,所以49放入的位置就是9了

散列地址012345678910111213
关键字1538618449
比较次数11114

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

A.不一定都是同义词 B.一定都是同义词 C.一定都不是同义词 D.都相同
解析:所探测的关键字可能是在处理其他关键字冲突过程中放入该位置的,因此不一定都是同义词

6 设集合中有n(n>1)个元素,分别存放在两个表中,表A按元素关键字从小到大存放,表B则无序存放。假设每个元素的查找概率相等,若对表A按有序表的顺序查找算法进行查找,对表B按一般表的顺序查找算法从表的前端进行顺序查找,则查找成功时,对于两个表的平均查找长度来说,(C)

A.表A大于表B B.表A小于表B C.相同 D.无法确定
解析:对于顺序查找而言,不论线性表中的元素是否有序,在每个元素的查找概率都相同的情况下,查找成功是的平均查找长度都是相等的,均为(n+1)/2

7 从19个元素中查找其中任意一个元素,如果最多进行4次元素之间的比较,则采用的查找方法只可能是(C)

A.折半查找 B.分块查找 C.散列查找 D.二叉排序树
解析:折半查找在查找成功时关键字的比较次数最多是向下取整[log2n]+1,大于4次;分块查找的查找效率在折半查找和顺序查找之间,但远不及折半查找,所以关键字的比较次数最多的情况下一定大于4次;二叉排序树理想情况下的高度是向上取整[log2 n+1],关键字的比较次数最多为树的高度,大于4次

8 已知一个长度为16的顺序表L,其元素按关键字有序排列,若采用折半查找法查找一个不存在的元素,则比较次数最多的是(B)

A.4 B.5 C.6 D.7
解析:具有n个结点的判定树的高度为向下取整[log2n]+1,所以最多比较5次

9 现有长度为7初始为空的散列表HT,散列函数H(k)=k%7,用线性探测法解决冲突。将关键字22,43,15依次插入到HT后,查找成功的平均查找长度是(C)

A. 1.5 B. 1.6 C. 2 D.3
解析:首先,将关键字插入位置:22%7=1;43%7=1,冲突,由于使用的是线性探测法解决冲突,所以43%7+1=2;15%7=1,冲突,15%7+1=2,还是冲突,15%7+2=3,将下表填写

散列地址0123456
关键字224315
比较次数123

ASL成功=(1+2+3)/3=2

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

A. 4 B. 5.25 C. 6 D.6.29
解析:跟前面的一样,先画出散列表,再计算ASL

散列地址012345678910
关键字982230871140620
比较次数11111112

ASL失败=(9+8+7+6+5+4+3)/7=6

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

  1. 画出描述折半查找过程的判定树
  2. 若查找元素54,需依次与哪些元素比较?
  3. 若查找元素90,需依次与哪些元素比较?
  4. 假定每个元素的查找概率相等,求查找成功时的平均查找长度
    在这里插入图片描述

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

  1. 画出散列表的示意图
散列地址1234567891011121314151617
关键字3217634924401030314647
比较次数11631211133
  1. 查找关键字63,需依次与哪些元素比较?
    首先求出H(63)=63%16=15,如表所示,15位存放的是31,又因为用线性探测法处理冲突,所以依次与46、47、32、17、63比较,最终找到63
  2. 若查找关键字60,需依次与哪些元素比较?
    跟上题一样,H(60)=60%16=12,如表所示,12位没存放元素,查找失败
  3. 假定每个元素的查找概率相等,求查找成功时的平均查找长度
    ASL成功=(1+1+6+3+1+2+1+1+1+3+3)/11=23/11≈2.09

13 设一组关键字(9,1,23,14,55,20,84,27),采用散列函数:H(key)=key%7,表长为10,用开放地址法的二次探测法处理冲突。要求:对该关键字序列构造散列表,并计算查找成功的平均查找长度。限定di取值为1^2,2^2,...,k^2(k≤m/2)

散列地址0123456789
关键字14192384275520
比较次数11123412

ASL成功=(1+1+1+2+3+4+1+2)/8=15/8=1.875

14 设散函数H(K)=3K%11,散列地址空间为0~10,对关键字序列(32,13,49,24,38,21,4,12),按下列两种解决冲突的方法构造散列表,并分别求出等概率下查找成功时和查找失败时的平均查找长度ASLsucc和ASLunsucc

  1. 线性探测法
散列地址012345678910
关键字412493813243221
比较次数11121212

ASLsucc=(1+1+1+2+1+2+1+2)/8=11/8=1.375
ASLunsucc=(1+2+1+8+7+6+5+4+3+2+1)/11=40/11≈3.64

  1. 链地址法
    在这里插入图片描述

15 将关键字序列{7,8,30,11,18,9,14}散列存储到散列表中,散列表的存储空间是一个下标从0开始的一维数组散列,函数为:H(key)=(key*3) MOD T,处理冲突采用线性探测再散列法,要求装载因子为0.7。请回答下列问题

  1. 请画出所构造的散列表
    因为装填因子要求为0.7,关键字个数有7个,所以表长m=7/0.7=10
    函数为:H(key)=(key*3) MOD 7
    线性探测再散列法函数为:H(key)=(H(key)+di) MOD 10,(di=1,2,3,…,9)
    H(7)=(7*3)%7=0
    H(8)=(7*3)%7=3
    H(30)=(7*3)%7=6
    H(11)=(11*3)%7=5
    H(18)=(18*3)%7=5,5号位已存11,发生冲突,需要采用线性探测再散列法解决冲突,所以H(18)=(5+1) MOD 10=6,6号位已存30,发生冲突,再采用线性探测再散列法解决冲突,H(18)=(5+2) MOD 10=7,7号位空,存入,比较了3次
    H(9)=(9*3)%7=6,冲突,所以H(9)=(6+1)%10=7,冲突,H(9)=(6+2)%10=8,不冲突
    H(14)=(14*3)%7=0,冲突,所以H(14)=(0+1)%10=0,不冲突
    所以最终散列表如下表所示
散列地址0123456789
关键字71481130189
比较次数1211133
  1. 分别计算等概率下查找成功时和查找失败时的平均查找长度
    ASLsucc=(1+2+1+1+1+1+3+3)/7=12/7≈1.71
    ASLunsucc=(3+2+1+2+15+4)/7=18/7≈2.57

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构与算法是计算机科学和软件工程领域中非常重要的基础知识。数据结构是指组织和存储数据的方式,而算法则是解决问题的一系列步骤。在这里,我将简要介绍数据结构与算法的基础知识。 1. 数组(Array):是一种线性数据结构,可以存储相同类型的元素。数组的特点是可以通过索引快速访问元素。 2. 链表(Linked List):也是一种线性数据结构,不同于数组,链表的元素在内存中可以不连续存储,每个元素包含一个指向下一个元素的指针。 3. 栈(Stack):是一种后进先出(LIFO)的数据结构,只能在栈的一端进行插入和删除操作。 4. 队列(Queue):是一种先进先出(FIFO)的数据结构,只能在队列的一端进行插入操作,在另一端进行删除操作。 5. 树(Tree):是一种非线性数据结构,由节点和边组成。树的一个节点可以有多个子节点。 6. 图(Graph):也是一种非线性数据结构,由节点和边组成。不同于树,图中的节点之间可以有多个连接。 7. 排序算法:常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等,它们用于将一组元素按照特定的顺序进行排列。 8. 查找算法:常见的查找算法包括线性查找、二分查找等,它们用于在一组元素中查找特定的值。 以上只是数据结构与算法的基础知识,还有许多其他重要的概念和算法,如哈希表、堆、图算法等。掌握数据结构与算法的基础知识可以帮助我们更好地理解和解决实际的计算机问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值