如果采用:
hashresult=(random1*key+random2)mod B
的形式的话,B尽量是一个质数。因为如果B和大部分(random1*key+random2)都具有公因子,将导致hash不均匀。B为(random1*key+random2)的因子这种情况也需要考虑,但是使得B为质数减少了结果不随机的情况。
B的值为小于桶数目的最大质数
例如需要将行排列重新转换时,“行数为质数时才会发生真正的转换”,这时尝试取小于等于行数的质数。必须含有random1和random2。也可以直接mod行数。
可以转化数字的排列,如123改为312来进行哈希,或者寻找key的规律。哈希时是否使用随机数得视情况而定,但B最好一定是质数。
将字符转换为数字:转为ASCII或Unicode码。如果B较大,则可以将字符串拆分为多个组,每个组包含多个字符,一组字符连在一起看成一个整数。