1. 除留余数法
原理:h(key) = key % m
缺点:容易产生冲突,特别是当m选择不当时。
2. 平方取中法
原理:先计算key的平方,然后取中间几位作为哈希值。
缺点:仍然有可能发生冲突。
3. 折叠法
原理:将长关键字分割成若干段,然后相加或异或得到结果。
缺点:同样不能避免冲突。
4. 随机探测法(二次探测、双重散列等)
原理:在发生冲突时按照一定的规则寻找下一个空闲槽位。
缺点:虽然减少了聚集现象,但并未从根本上消除冲突的可能性。
5. 拉链法
原理:每个桶存储一个链表,冲突的元素被添加到对应桶的链表中。
缺点:虽然有效管理了冲突,但不是从函数设计上避免冲突。
6. 完美哈希
特点:针对特定数据集可以做到无冲突。
限制:不具有通用性,一旦数据集发生变化就可能失效。