高频考法:判断双散列能否探测整张表。
1. 双散列公式
常见形式:
Hi = [H1(key) + i × H2(key)] mod m
其中:
H2(key)
就是探测步长。
2. 能否遍历整张表看什么
看:
gcd(H2(key), m)
如果:
gcd = 1
则步长与表长互质,可以遍历整张表。
如果:
gcd > 1
则只能访问部分位置。
3. 能探测多少位置
公式:
可探测位置数
= m / gcd(m, 步长)
例如:
m=8
步长=2
gcd(8,2)=2
只能探测:
8/2=4
个位置。
4. 为什么互质这么重要
如果步长和表长有公因子:
会在某一小组位置中循环
明明表中还有空位,也可能永远探测不到。
5. 第二散列函数的设计目标
重点不是死背某一个公式,而是:
让步长尽量和表长互质
常见设计:
H2(key)=R-(key%R)
其中 R 常选小于表长的质数。
6. 考场速记
双散列先看步长
步长表长要互质
gcd=1 → 全表覆盖
gcd>1 → 部分覆盖