为什么Hashtable的vector大小(也叫桶大小)选取质数?
是为了减少哈希冲突。
桶大小的选取是如何影响哈希冲突的呢?下面有两种看法:
1、举个例子,对于除法哈希表(Division method)h(k)=k mod m注意二进制数对取余就是该二进制数最后r位数。这样一来,Hash函数就和键值(用二进制表示)的前几位数无关了,这样我们就没有完全用到键值的信息,这种选择m的方法是不好的。所以好的方法就是用质数来表示m,使得这些质数,不太接近2的幂或者10的幂。
2、首先来说假如关键字是随机分布的,那么无所谓一定要模质数。但在实际中往往关键字有某种规律,例如大量的等差数列,那么公差和模数不互质的时候发生碰撞的概率会变大,而用质数就可以很大程度上回避这个问题。