“这只是 开放定址的一种序列。二次探测和双重哈希不形成同样的连续 cluster,不能借用本页的精确概率公式或删除规则。”
探测接口 ​
容量为
并要求固定键的探测序列覆盖所有槽。查找依次检查
期望探测数 ​
负载
成功查找至多约
删除链例子 ​
若键
边界与重建 ​
墓碑率或负载越过阈值后应全局重建。阈值需要迟滞,避免插删交替反复扩缩。开放定址利用连续数组局部性,但不等同于 chaining;删除语义、最大装载率和并发发布顺序都不同。若哈希随机种子暴露给自适应对手,期望界还需更强哈希假设。
三类探测的不同前提 ​
线性探测
Uniform hashing 分析把探测序列视为随机排列,强于“首页位置均匀”。现实方法可能有更专门的 cluster 分析;不能把
两种占用率与重建时机 ​
含墓碑的实现要区分活键负载
因此重建条件通常同时监控“活键过多”和“墓碑过多”。原地把新键写进首个墓碑前,仍要继续探测到真空槽或已有同键,否则可能为同一键建立两个副本。
一次扩容应新建更大表并重新插入所有有效键,墓碑不能原样复制。若扩容阈值固定低于 1,每次重建后的容量至少成比例增长,累计搬迁为线性,从而保持插入摊还常数;这仍不提供单次操作最坏延迟。
参考资料
- Donald Knuth, The Art of Computer Programming, Vol. 3, Hashing.
- Cormen et al., Introduction to Algorithms, Open Addressing.
- Mihai Pătraşcu, Mikkel Thorup, The Power of Simple Tabulation Hashing, JACM, 2012.