20230410 11.2. 散列函数的构造方法

一个“好”的散列函数一般应考虑下列两个因素:

  1. 计算简单,以便提高转换速度;
  2. 关键词对应的地址空间分布均匀,以尽量减少冲突。

数字关键词的散列函数构造

  1. 直接定址法

    取关键词的某个线性函数值为散列地址,即 \(h(key) = a * key + b (a、b为常数)\)

  2. 除留余数法

    散列函数为:\(h(key) = key \mod p\)

  3. 数字分析法

    分析数字关键字在各位上的变化情况,取比较随机的位作为散列地址

  4. 折叠法

    把关键词分割成位数相同的几个部分,然后叠加

  5. 平方取中法

字符关键词的散列函数构造

  1. 一个简单的散列函数——ASCII码加和法

    对字符型关键词key定义散列函数如下:$ h(key) = (Σkey[i]) \mod TableSize$

  2. 简单的改进——前3个字符移位法

    \(h(key)=(key[0]*27^2 + key[1]*27 + key[2])\mod TableSize\)

  3. 好的散列函数——移位法

    涉及关键词所有n个字符,并且分布得很好:

    \(h(key)=(\sum_{i=0}^{n-1}key[n-i-1]*32^i) \mod TableSize\)

Java 关联

  • Object#hashCode
  • Integer#hashCode
  • String#hashCode
posted @ 2023-06-20 11:24  流星<。)#)))≦  阅读(47)  评论(0编辑  收藏  举报