
【计】 hash table
散列表(Hash Table),又称哈希表或散列映射,是一种高效的数据结构,用于存储键值对(key-value pairs)。其核心思想是利用哈希函数(Hash Function) 将键(key)映射到存储位置(桶或槽),从而实现数据的快速插入、删除和查找操作。
哈希函数
将任意大小的键(如字符串、对象)转换为固定大小的整数(哈希值)。理想情况下,不同键应映射到不同索引,但实际可能存在冲突(Collision)。
示例: 对键 "apple"
应用哈希函数可能输出 3
,表示数据存储在索引为 3 的桶中。
冲突解决
时间复杂度
操作 | 平均复杂度 | 最坏复杂度 |
---|---|---|
插入/删除/查找 | $O(1)$ | $O(n)$ |
需平衡均匀性与计算效率(如MurmurHash、SHA系列)。
红黑树替代链表(Java HashMap)减少最坏情况复杂度 。
低负载因子减少冲突但增加内存开销,通常取 $0.7$–$0.8$ 。
# Python 字典(散列表实现)
grades = {}
grades["Alice"] = 90# 插入:哈希("Alice") → 存储位置
print(grades["Alice"])# 查找:直接定位键值
grades.pop("Alice") # 删除:O(1) 复杂度
散列表(Hash Table)是一种高效的数据结构,用于存储键值对(key-value pairs),通过“散列函数”将键(key)映射到内存中的特定位置,从而实现快速的数据插入、删除和查找操作。
散列函数(Hash Function)
将任意长度的键转换为固定长度的哈希值(通常为整数)。理想情况下,不同的键应映射到不同的位置,但实际可能存在冲突。常见散列函数包括:
hash(key) = key % size
(对表大小取余)。哈希冲突(Collision)
当不同键被映射到同一位置时发生冲突。解决方法主要有:
负载因子(Load Factor)
表示表中已存元素与总容量的比值(公式:$lambda = frac{n}{m}$,$n$为元素数,$m$为表大小)。负载因子过高会导致冲突率上升,通常需动态扩容。
通过合理设计哈希函数和冲突策略,散列表能显著提升数据操作效率,是计算机科学中基础且重要的数据结构之一。
【别人正在浏览】