哈希表(散列表)的构造方法和哈希冲突
一、散列函数的构造方法
1、直接定址法
取关键字的某个线性函数的值作为地址:
F(key) = A * key + B (A、B为常数)
比如我要存储某个社区年龄0-20岁的人,那么我们可以直接使用年龄的数值作为地址:
F(key) = key (A=1、B=0)
采用这种方法构造的散列表结构简单,不会产生冲突。缺点就是需要事先知道关键字key的分布情况。
适合表小且连续的情况,一般使用较少
2、数字分析法
我们的手机号、身份证号、学号等等,数字位数较多,但是他们分布较为均匀。比如手机号,一般是后四位为用户的用户号,我们可以选取后四位作为散列地址。如何仍有哈希冲突,我们可以进行字符串反转等等方法去解决这类方法的哈希冲突。
通常适用于处理关键字key位数较大且已知关键字的分布
3、平方取中法
将关键字key平方,然后取平方数的中间三位作为散列地址。
假设key为100,则平方后为10000,取中间三位000作为地址
适用于不知道key的分布且位数不大
4、折叠法
折叠法是将关键字从左到右分割成位数相等的几