1、直接定址法
公式:H(key) = a * key + b,a b 为常数
例:统计出生年份,可将公式变换为:f(key) = key - 1990
key | addr | value(万) |
---|---|---|
1990 | 0 | 10 |
1991 | 1 | 12 |
1992 | 2 | 5 |
1993 | 3 | 44 |
2、除留取余法
对于表长为m的散列表
公式:H(key) = key % p, (p <= m ,p一般取素数)
例:p = TableSize = 17
34 % 17 = 0
key | addr | value(万) |
---|---|---|
34 | 0 | 10 |
18 | 1 | 12 |
2 | 2 | 5 |
20 | 3 | 44 |
… | 16 | … |
3、数字分析法
分析数字关键字在各位上的变化情况,取比较随机的位作为散列地址。比如,手机号
码,一般来说,后面4位是真正的用户号。
公式:H(key) = atoi(key + 7)
例:key = 手机号:13312345678
key | addr | value(手机号) |
---|---|---|
13312345678 | 5678 | 13312345678 |
4、 折叠法
把关键字分割成位数相同的几个部分,然后叠加
例:
5、平方取中法
把关键字做平方计算,然后取结果中的中间三位