Skip to content

第五章 哈希表、集合与并查集


1. 从“比较”到“映射”:哈希表的核心跳跃

前面几章的高效结构,大多依赖次序或层次。例如数组用下标定位,BST 用大小关系缩小搜索范围,堆用父子大小规律维护最值。哈希表走的是另一条路:不通过比较逐步逼近目标,而是先把关键字映射到某个桶位置,再在局部处理冲突。

这是一种非常重要的思想跃迁。它意味着:

  1. 结构不再强调整体有序。
  2. 查找速度不再主要来自“比较次数减少”,而来自“映射直接命中”。
  3. 性能瓶颈从比较路径转向哈希函数和冲突分布。

2. 哈希表的组成

一个典型哈希表通常包含三部分:

  1. 桶数组。
  2. 哈希函数。
  3. 冲突解决策略。

若不同关键字被映射到同一个桶,就发生冲突。冲突不是异常,而是哈希表设计中必须接受并处理的常态。

3. 哈希函数应该追求什么

4. 冲突解决:拉链法与开放定址法

4.1 拉链法

4.2 开放定址法

5. Go 里为什么还要手写哈希表

6. 用 Go 实现一个简单的链式哈希集合

7. 集合抽象:不关心顺序,只关心成员关系

8. 并查集:维护连通分量的专用结构

9. 并查集的核心思想

10. 路径压缩与按秩合并

11. Go 实现并查集

12. 哈希表与并查集的关系与区别

13. 本章小结

14. 继续深入