【PTA】【数据结构与算法】散列冲突

该博客围绕散列表哈希查找展开,包含22道选择题及解析。涉及散列冲突描述、不同冲突处理方法(如分离链接法、线性探测法、平方探测法等)下的查找次数、元素插入位置、装填因子、平均查找长度等知识点,帮助理解散列表相关概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

选择题

1.散列冲突可以被描述为: (1分)
选项
A两个元素除了有不同键值,其它都相同
B两个有不同数据的元素具有相同的键值
C两个有不同键值的元素具有相同的散列地址
D两个有相同键值的元素具有不同的散列地址

解析:经过散列函数变换后,可能将不同的关键字映射到同一个散列地址上,这种现象称为冲突。

2.若N个关键词被散列映射到同一个单元,并且用分离链接法解决冲突,则找到这N个关键词所用的比较次数为:(2分)
选项
AN(N+1)/2
BN(N−1)/2
CN+1
DN

解析:查找第一个1次,第二个2次,…,第N个N次,共N(N+1)/2次。

3.采用线性探测冲突解决策略,hi(k)=(H(k)+i)mod 11,将散列函数值分别等于2、2、3、3的四个对象a1、a2、a3、a4都插入一个大小为11的空散列表(哈希表)中。在不同的插入顺序中,哪句有关插入后散列表平均成功查找长度的判断是错的? (2分)
选项
A按a1、a2、a3、a4顺序和按a1、a3、a4、a2顺序,平均成功查找长度一样
B按a1、a3、a2、a4顺序和按a3、a1、a2、a4顺序,平均成功查找长度一样
C按a1、a3、a2、a4顺序和按a4、a1、a2、a3顺序,平均成功查找长度一样
D按任何插入顺序,其平均成功查找长度都一样

解析:

4.__是HASH查找的冲突处理方法: (2分)
选项
A求余法
B平方取中法
C二分法
D开放地址法

解析:几个基本的冲突处理方法:开放地址法、平方探测法、双散列探测法、再散列法和分离链接法。

5.下面关于哈希查找的说法,不正确的是( )。 (2分)
选项
A采用链地址法处理冲突时,查找一个元素的时间是相同的
B采用链地址法处理冲突时,若插入规定总是在链首,则插入任一个元素的时间是相同的
C用链地址法处理冲突,不会引起二次聚集现象
D用链地址法处理冲突,适合表长不确定的情况

解析:如果两个元素在同一个链表中,查找时间肯定不同。

6.假定有K个关键字互为同义词,若用线性探测法把这K个关键字存入散列表中,至少要进行多少次探测? (2分)
选项
AK−1
BK
CK+1
DK(K+1)/2

解析:第一个关键字需要探测一次,以后的关键字均比前一个关键字要多探查一次,则共需探测K(K+1)/2次。

7.采用线性探测法解决冲突时所产生的一系列后继散列地址: (1分)
选项
A必须大于等于原散列地址
B必须小于等于原散列地址
C可以大于或小于但不等于原散列地址
D对地址在何处没有限制

解析:循环后会在原散列地址前。

8.将元素序列{18,23,11,20,2,7,27,33,42,15}按顺序插入一个初始为空的、大小为11的散列表中。散列函数为:H(Key)=Key%11,采用线性探测法处理冲突。问:当第一次发现有冲突时,散列表的装填因子大约是多少? (3分)
选项
A0.27
B 0.45
C0.64
D0.73

解析:5/11=0.45。

9.给定散列表大小为11,散列函数为H(Key)=Key%11。采用平方探测法处理冲突:h​i​​(k)=(H(k)±i​2)%11将关键字序列{ 6,25,39,61 }依次插入到散列表中。那么元素61存放在散列表中的位置是: (2分)
选项
A5
B6
C7
D8

解析:6-1=5。

10.给定散列表大小为11,散列函数为H(Key)=Key%11。按照线性探测冲突解决策略连续插入散列值相同的4个元素。问:此时该散列表的平均不成功查找次数是多少? (2分)
选项
A1
B4/11
C21/11
D不确定

解析:(5+4+3+2+1+1+1+1+1+1+1)/11。

11.若用平方探测法解决冲突,则插入新元素时,以下陈述正确的是: (1分)
选项
A插入一定可以成功
B 插入不一定能成功
C插入一定不能成功
D若散列表容量为质数,插入就一定可以成功

解析:有可能溢出,插入失败。

12.给定输入序列 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 以及散列函数 h(X)=X%10。如果用大小为10的散列表,并且用分离链接法解决冲突,则输入各项经散列后在表中的下标为:(-1表示相应的插入无法成功)(2分)
选项
A1, 3, 3, 9, 4, 9, 9
B1, 3, 4, 9, 7, 5, -1
C1, 3, 4, 9, 5, 0, 8
D1, 3, 4, 9, 5, 0, 2

解析:除余即可得下标。

13.给定输入序列 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 以及散列函数 h(X)=X%10。如果用大小为10的散列表,并且用线性探测解决冲突,则输入各项经散列后在表中的下标为:(-1表示相应的插入无法成功)(2分)
选项
A1, 3, 3, 9, 4, 9, 9
B1, 3, 4, 9, 7, 5, -1
C1, 3, 4, 9, 5, 0, 8
D1, 3, 4, 9, 5, 0, 2

解析:冲突往右移到空位。

14.给定输入序列 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 以及散列函数 h(X)=X%10。如果用大小为10的散列表,并且用平方探测解决冲突,则输入各项经散列后在表中的下标为:(-1表示相应的插入无法成功)(2分)
选项
A1, 3, 3, 9, 4, 9, 9
B1, 3, 4, 9, 7, 5, -1
C1, 3, 4, 9, 5, 0, 8
D1, 3, 4, 9, 5, 0, 2

解析:冲突+1-1移到空位。

15.给定输入序列 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 以及散列函数 h(X)=X%10。如果用大小为10的散列表,并且用开放定址法以及一个二次散列函数h2 (X)=7−(X%7)解决冲突,则输入各项经散列后在表中的下标为:(-1表示相应的插入无法成功)(2分)
选项
A1, 3, 3, 9, 4, 9, 9
B1, 3, 4, 9, 7, 5, -1
C1, 3, 4, 9, 5, 0, 8
D1, 3, 4, 9, 5, 0, 2

解析:

16.给定散列表大小为17,散列函数为H(Key)=Key%17。采用平方探测法处理冲突:hi(k)=(H(k)±i2)%17将关键字序列{ 6, 22, 7, 26, 9, 23 }依次插入到散列表中。那么元素23存放在散列表中的位置是:(3分)
选项
A0
B2
C6
D15

解析:6-4=2。

17.给定散列表大小为17,散列函数为H(Key)=Key%17。采用平方探测法处理冲突:h​i(k)=(H(k)±i2)%17将关键字序列{ 6, 22, 7, 26, 9, 40 }依次插入到散列表中。那么元素40存放在散列表中的位置是:(3分)
选项
A2
B6
C8
D15

解析:6-4=2。

18.将元素序列{18, 23, 4, 26, 31, 33, 17, 39}按顺序插入一个初始为空的、大小为13的散列表中。散列函数为:H(Key)=Key%13,采用线性探测法处理冲突。问:当第一次发现有冲突时,散列表的装填因子大约是多少? (3分)
选项
A0.54
B0.63
C0.31
D0.62

解析:4/13=0.31。

19.给定散列表大小为11,散列函数为H(Key)=Key%11。按照线性探测冲突解决策略连续插入散列值相同的5个元素。问:此时该散列表的平均不成功查找次数是多少?(2分)
选项
A26/11
B5/11
C1
D不确定

解析:(6+5+4+3+2+1+1+1+1+1+1)/11。

20.现有长度为 7、初始为空的散列表HT,散列函数H(k)=k%7,用线性探测再散列法解决冲突。将关键字 22, 43, 15 依次插入到HT后,查找成功的平均查找长度是:(2分)
选项
A1.5
B1.6
C2
D3

解析:22%7=1,冲突为0,43%7=1,冲突为1,15%7=1,冲突为2,(1+2+3)/3=2。

21.现有长度为 11 且初始为空的散列表 HT,散列函数是 H(key)=key%7,采用线性探查(线性探测再散列)法解决冲突。将关键字序列 87,40,30,6,11,22,98,20 依次插入到 HT 后,HT 查找失败的平均查找长度是:(2分)
选项
A4
B5.25
C6
D6.29

解析:(9+8+7+6+5+4+3)/7=6。

22.设数字 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 在大小为10的散列表中根据散列函数 h(X)=X%10得到的下标对应为 {1, 3, 4, 9, 5, 0, 2}。那么继续用散列函数 “h(X)=X%表长”实施再散列并用线性探测法解决冲突后,它们的下标变为:(3分)
选项
A11, 3, 13, 19, 4, 0, 9
B1, 3, 4, 9, 5, 0, 2
C1, 12, 9, 13, 20, 19, 11
D1, 12, 17, 0, 13, 8, 14

解析:再散列将散列表扩大一倍,表长变为20,然后取最近的质数23作为表长。

### PTA平台上数据结构算法相关的练习题 #### 题目特点概述 PTA平台提供了丰富的数据结构算法练习题,这些题目涵盖了多种经典的数据结构操作以及常见的算法设计思路。对于不同难度级别的选手来说都是很好的训练资源。 #### 具体实例分析 ##### BFS遍历图的表示方 当处理具有大量节点的情况时,采用链表来代替矩阵作为存储方式能够有效减少内存占用并提高效率[^1]。尽管如此,在某些特定场景下直接利用矩阵实现可能会带来意想不到的速度优势。这表明选择合适的数据结构取决于具体应用场景的需求。 ```python from collections import deque def bfs_with_levels(graph, start_node): visited = set() queue = deque([(start_node, 0)]) while queue: current_node, level = queue.popleft() if current_node not in visited: print(f'Visiting node {current_node} at level {level}') visited.add(current_node) neighbors = graph[current_node] for neighbor in neighbors: queue.append((neighbor, level + 1)) ``` ##### 动态规划贪心策略的选择 面对涉及价值最大化的问题,如L2-003中的月饼分配问题,既可以考虑使用动态规划的方求解,也可以尝试基于物品单位重量的价值来进行排序后的贪心选取方案[^2]。两种方各有优劣,前者适合解决较为复杂的约束条件下的最优化问题;后者则适用于那些可以通过局部最优决策推导出全局最优解的情形。 ##### 搜索树构建及其验证 针对二叉搜索树这类特殊形式的树形结构,其定义要求左子树上所有节点的关键字均小于根节点关键字,而右子树上的所有节点关键字都大于等于根节点关键字。因此,在给定一组整数键值序列的情况下,可以根据上述性质逐个插入元素形成一棵可能存在的BST,并通过后续检验确认最终得到的结果是否满足该特性[^3]。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值