Appearance
题目
下列关于散列法处理冲突的叙述中,正确的是( )。
错因
B
忽视了二次探查的覆盖性限制。二次探查的探查序列为 (mod ),只能覆盖部分位置——只有当 是形如 的素数时,二次探查才能保证遍历全部 个位置。一般情况下即使表里仍有空位,也可能因探查序列恰好不覆盖到该空位而失败。
C
忽略了线性探查带来的"聚集"现象。线性探查时由于探查序列是连续的 ,原本散列地址不同的两个关键字也会因前面元素占用而产生冲突——即非同义词冲突。例: 占用位置 5, 时若 已占据位置 6(来自之前的探查), 仍会与之相撞。两者根本不是同义词。这就是"二次聚集 / 堆积"现象。
D
误以为"二次探查比线性更分散,所以冲突只发生在非同义词"。实际上:① 真正的同义词( 值相同)放在一起就一定冲突,与探查方式无关;② 二次探查序列里某个位置被前面关键字占用后,后来者可能再碰上它,产生非同义词冲突。"一定是非同义词"两个方向都不对。
总解析
思路:把四个选项依次比对线性探查和二次探查的特性即可。
核心区别:
| 探查方式 | 探查序列(mod ) | 覆盖性 |
|---|---|---|
| 线性探查 | 一定覆盖全部 个位置 | |
| 二次探查 | 仅覆盖部分位置(需 为 形式素数才能全覆盖) |
逐项核对:
- A ✓ 线性探查的探查序列 (mod )一定遍历所有 个位置,只要表不满(至少有一个空位)就一定能在某次探查时落到空位上。
- B ✗ 二次探查可能在表未满时陷入循环(探到的全是已占位置),找不到空位。
- C ✗ 线性探查存在堆积,导致非同义词之间也会冲突。
- D ✗ 二次探查同义词必冲突( 值相同),且也可能与非同义词冲突。
最终答案是 A。