Skip to content

04 哈希表 — 最快的查找结构

李永乐式比喻

  • 你去图书馆借书,如果书架没有分类,你要挨个书架找 -> O(n)
  • 图书馆有索书号系统(A 类文学、B 类数学...)-> 你直接去对应区域 -> O(1)
  • 哈希冲突:两个人选的索书号相同怎么办?在这个架子上再加一层小架子(链地址法)
  • 负载因子:架子上书太多会影响找书效率,所以要换更大的图书馆(扩容)

名词映射

英文中文本质比喻
Hash Table哈希表键到值的映射,通过哈希函数定位索书号系统
Hash Function哈希函数把键转换为数组索引的算法书到索书号的转换规则
Hash Collision哈希冲突两个不同键映射到同一位置两本书索书号相同
Chaining链地址法数组每个位置挂一个链表同索书号的书放同一格
Load Factor负载因子元素数 / 数组容量书架的使用率
Rehashing重新哈希容量不够时扩容并重新分布换更大的图书馆重新编号

哈希表结构


负载因子与扩容


企业场景

  • 数据库索引:MySQL 哈希索引(Memory 引擎)-- 等值查询 O(1)
  • 缓存系统:Redis / Memcached -- 全部基于哈希表
  • 去重:Python 的 set / dict 底层都是哈希表
  • 分布式哈希:一致性哈希 -- 缓存分片、负载均衡

AI 协作

AI 生成:
  - 实现哈希表(含哈希函数、链地址法、扩容)-- ~100 行 Python
  - LeetCode 1 两数之和 -- 用哈希表降到 O(n)
  - 分析和设计合理的哈希函数

人类决策:
  - 键值对无序 -> 哈希表
  - 需要范围查询(值 > 100)-> 哈希表不行 -> 用树
  - 需要保证顺序 -> 用 LinkedHashMap

OPC 超级个体实战指南