Skip to content

哈希表

Hash table

用哈希函数把键映射到桶并处理冲突的字典结构。

条目类型
模型

形式陈述

哈希表用哈希函数 h:U{0,,m1} 把键映射到含 m 个槽位的数组。不同键可能碰撞,必须由链地址、开放寻址或其他策略处理。负载因子通常为 α=n/m。在简单均匀哈希等随机性假设下,链地址查找、插入和删除的期望成本为 O(1+α);开放寻址还依赖探测序列和 α<1。最坏情况下所有键碰撞,操作可退化到 Θ(n)

直觉

哈希表把大键空间映射为一个可快速计算的“近似地址”,直接跳到键可能所在的有限桶数组,再在碰撞结构中做少量局部工作。期望效率来自“键分布经哈希后近似均匀”,而非数组访问本身神奇地消除搜索。碰撞不可避免,必须由链式、开放寻址等策略解析;负载因子控制每桶竞争和探测长度。哈希值相同只表示候选桶相同,最终仍需比较键以确认相等。

哈希映射与链地址冲突解析
例子与边界

链地址把同槽键放入链表或小容器;开放寻址把所有键留在数组并按探测序列寻找空槽。删除开放寻址元素常需墓碑,否则会截断后续查找路径。扩容并重新哈希可保持负载因子,但单次扩容为线性成本,通常靠摊还分析得到长期常数。密码学哈希强调抗碰撞/抗攻击,普通算法哈希只需分布和速度,目标不同。

容量 8、哈希 h(k)=kmod8 时,键 3,11,19 全落入桶 3。链式法把它们放在同一链中;线性探测则依次寻找空槽。扩容到更大表后通常需重新哈希,因为桶索引依赖容量。

最坏情况下所有键碰撞,操作退化为 O(n);“平均 O(1)”需要随机哈希、独立性或输入假设。删除开放寻址元素不能简单置空,否则会截断后续探测链,通常使用 tombstone 或后移修复。

推论与应用

数组提供桶,哈希函数提供定位,二者共同实现字典、映射与集合 ADT。面对预先固定的最坏键集,通用哈希把随机性放在选函数上;静态集合可进一步用完美哈希把碰撞消除。若只需节省空间的近似成员查询,Bloom Filter允许假阳性,但它不存储值,也不是哈希表的冲突处理方式。

这些结构的保证属于不同概率空间与更新模型。哈希表页只承担冲突解决、负载因子和期望复杂度框架;密码哈希的计算抗碰撞、完美哈希的静态构建以及 Bloom Filter 的误报率分别由专页定义,不能以“平均 O(1)”互相替代。

哈希表主体只承诺字典语义与负载参数,冲突策略应分层阅读:通用哈希给对固定键集的碰撞期望,Perfect Hashing针对静态集合换最坏常数查询,开放定址把键直接放入数组并依探测链,Cuckoo Hashing用两个候选位置和重哈希。Bloom Filter允许假阳性,已不再实现精确字典;不能把其节省空间与哈希表查询并列成同一保证。

参考资料
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Ch. 11, hash tables, chaining, and open addressing。
  • Robert Sedgewick and Kevin Wayne, Algorithms, 4th ed., Addison-Wesley, 2011,§3.4, hash tables and symbol-table implementations。
关系图谱16 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

暂未标注直接上位概念。

下位 / 直接特例

类型化关系