Skip to content

2019年 408 数据结构 第 8 题

数据结构2019年选择题2分

题目

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

错因

A

把分母用错,按""(除以表长 11)算:,再四舍五入到 4。但是 的值域只能是 ,分母应该是 7,不是表长 11。

B

可能用 (除以已插入的元素个数 8)。这是把分母混成了"成功查找"的分母——成功查找的 ASL 才以 n(关键字数)为分母,失败查找应该以 的值域大小为分母。

D

,等价于在求和里多算了一个起点。例如把 也当作可能的散列地址,加上"从位置 7 开始探查到位置 8 是空"算 2 次,得 。但 的值域是 ,根本不会从 7 开始查。

总解析

ASL 失败定义:对每个可能的散列地址 (k 是 H 的值域大小),从位置 h 开始线性探查,直到第一个空槽为止的比较次数的平均。"碰到空槽"的那一次比较也算 1 次。

步骤 1:依次插入并跟踪散列表状态。

关键字实际位置
8733
4055
3022
666
1144
2211
9800
206(冲突)7(探到下一空位)

最终散列表状态(位置 8、9、10 为空):

位置012345678910
982230871140620

步骤 2:对每个起始地址 h ∈ {0,1,2,3,4,5,6},从位置 h 开始往后线性探查,直到遇到第一个空槽(位置 8)为止:

h探查路径比较次数
08 空9
18 空8
28 空7
38 空6
48 空5
58 空4
68 空3

步骤 3:对所有 7 个可能起点取平均:

最终答案是 C

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数