一、哈希碰撞的本质与常见解法
哈希碰撞(Hash Collision)是指不同key通过哈希函数计算得到相同索引的情况。解决碰撞主要有以下两种经典方法:
1. 链地址法(Separate Chaining)
-
原理:每个桶(bucket)维护一个链表,碰撞元素追加到链表末端
-
时间复杂度:
-
最优:O(1)(无碰撞)
-
最差:O(n)(所有元素碰撞,退化成链表)
-
-
空间开销:额外指针存储空间
2. 开放定址法(Open Addressing)
-
原理:遇到碰撞时,按探测序列寻找下一个可用槽位
-
常见探测方法:
-
线性探测:
h(k, i) = (h'(k) + i) % m
-
二次探测:
h(k, i) = (h'(k) + c₁i + c₂i²) % m
-
双重哈希:
h(k, i) = (h₁(k) + i*h₂(k)) % m
-