【数据结构真题解析】哈希表中等难度挑战:冲突处理与查找效率深度剖析

📚【中等难度 · 哈希表真题】

(改编自某985高校期末 & 408风格)

已知一组关键字为:

(19, 14, 23, 1, 68, 20, 84, 27, 55, 11, 10, 79)

哈希表长度为 13 ,采用 除留余数法 构造哈希函数,即:
H(key) = key % 13

请完成以下任务:

(1)若采用线性探测法处理冲突,请:
  • 画出最终的哈希表;

  • 计算查找成功时的平均查找长度(ASL)。

(2)若采用链地址法处理冲突,请:
  • 画出哈希表的存储结构(可用链表图示或文字描述);

  • 计算查找成功时的平均查找长度(ASL)。

(3)比较两种方法在本题中的 ASL,简要说明哪种更适合此数据?为什么?

✅ 参考答案

(1)线性探测法
  • **哈希函数:**H(key) = key % 13

  • 插入过程 略(需逐步探测)

  • 最终哈希表(地址0~12):

0: ------(空)

1: 14

2: 1

3: 68

4: 27

5: 55

6: 19

7: 20

8: 84

9: 79

10: 23

11: 11

12: 10

各关键字查找长度(探测次数):19→6(1次),14→1(1次),23→10(1次),1→1→2(2次),68→3(1次),20→7(1次),84→6→7→8(3次),27→1→2→3→4(4次),55→3→4→5(3次),11→11(1次),10→10→11→12(3次),79→1→2→3→4→5→6→7→8→9(9次)

总查找次数 =1 + 1 + 1 + 2 + 1 + 1 + 3 + 4 + 3 + 1 + 3 + 9 = 30
ASL = 30 / 12 =2.5

(2)链地址法

链表结构:

0:

1: 14 → 1 → 27 → 79

2:

3: 68 → 55

4:

5:

6: 19 → 84

7: 20

8:

9:

10: 23 → 10

11: 11

12:

查找长度: 地址1(4个):14(1), 1(2), 27(3), 79(4) → 小计:1+2+3+4 = 10 地址3(2个):68(1), 55(2) → 小计:3 地址6(2个):19(1), 84(2) → 小计:3 地址7(1个):20(1) → 小计:1 地址10(2个):23(1), 10(2) → 小计:3 地址11(1个):11(1) → 小计:1

总次数 = 10 + 3 + 3 + 1 + 3 + 1 = 21

ASL = 21 / 12 = 1.75

(3)比较
  • 链地址法 ASL 更小(1.75 < 2.5);
  • 因装填因子高达 0.92,线性探测产生严重聚集;
  • 链地址法更适合此场景。

相关推荐
信奥卷王7 小时前
[GESP202509 六级] 划分字符串(含视频)
数据结构·算法
m0_752035637 小时前
Redis 数据结构总结
数据结构·数据库·redis
tachibana27 小时前
Go 语言的 Map 是否是并发安全的?
开发语言·数据结构·后端·golang·go·语言
Logic1018 小时前
C语言/数据结构字符串题解:统计“chhc“子串权值总和——一次遍历模式匹配
c语言·数据结构·算法·字符串·时间复杂度·空间复杂度·ascii
我命由我123458 小时前
LRU 缓存淘汰策略
数据结构·redis·学习·mysql·算法·缓存·学习方法
垆边人似月.9 小时前
华为题:合并区间
数据结构·c++·算法
垆边人似月.9 小时前
华为题:滑动窗口最大值
数据结构·c++·算法
m0_547486669 小时前
《数据结构 (C语言)》期末试卷及答案(10套)2026版
c语言·开发语言·数据结构
杜 硕10 小时前
归并排序详解
数据结构·算法·排序算法
_wxd66612 小时前
二叉搜索树(BST)万字详解:概念、操作、性能分析与 C++ 实现
数据结构·c++·二叉搜索树