求余方法(Division Method)
hash(k) = k % m复制代码
首先,假设我们使用的表的大小是m, 在后继的文章中我们会继续聊一下有关哈希表的大小。但是如果m是奇数,且k均为奇数的话,这个哈希函数就会完全浪费表函数中几乎一半的位置。在最糟糕的情况下,整个算法会退化为一般的线性查找,复杂度为O(n)。
乘法方法(Multiplication Method)
hash(k) = ((a * k) mod 2^w) >> (w - r)其中 r = logm, w = logk复制代码
a是一个随机值。理论上的效率还不错。
全局哈希(Universal hash)
hash(k) = ((a * k + b) % p) % m复制代码
这里p是一个大于m的质数, a和b都是小于p的一个随机值。