Skip to content

2018年 408 数据结构 第 9 题

数据结构2018年选择题2分

题目

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

错因

A

只算了前两个关键字。22 比较 1 次、43 比较 2 次、15 漏算 → 。本质上是把"等到所有元素都插入完之后再统一算 ASL"理解成了"每插一个就算一次再求平均",结果丢掉了 15 那一项。

B

把分母错写成 5(或其它数字)凑出 1.6。一个常见走法:在统计每个关键字"探测过的下标个数"时,把空槽也勉强算了进去 也不对,但和"加权平均"混杂运算可能凑得 1.6。本质都是平均时分子或分母数错了——ASL_succ 的标准做法是"每个已插入关键字查找成功一次需要的比较次数之和 ÷ 已插入关键字个数",分母只能是 3。

D

把"查找成功最多比较多少次"当成了"平均比较多少次"。15 这个关键字的确需要比较 3 次才命中,但平均不是最大值。选 D 的人通常没意识到平均查找长度是算术平均而不是"取最坏情况"。

总解析

线性探测的插入流程:哈希到 位置;若该位置已占,则探测 (mod 表长)直到遇到空槽。插入时探测了多少个位置(含命中的那一个),将来查找成功时也要比较多少次——因为查找走的是同一条探测链。

逐个插入(表长 ):

关键字探测过程落点下标查找成功比较次数
22HT[1] 空,直接放11
43HT[1] 已占(22)→ 探 HT[2] 空,放22
15HT[1] 占 → HT[2] 占 → HT[3] 空,放33

得到散列表(下标 0–6):

下标0123456
内容224315

计算 ASL(成功)

直观上,三个元素全部哈希到同一个槽 1,被线性探测连续推到 1、2、3 三个位置,分别需要 1、2、3 次比较才能定位,平均一定是中间那个数 2。

最终答案是 C(2)

最后更新:

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

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