所以,在CLRS中,有这个引用
一个不太接近2的精确幂的素数通常是m的一个好选择。
几个问题......
答案 0 :(得分:0)
您正在尝试找到一个适用于典型输入数据的哈希表,而典型的输入数据会执行您不会从良好的随机数生成器中获得的内容。通常你会得到格式化或半格式化的字符串,当转换为数字时,最终为K,K + A,K + 2A,K + 3A,....对于某些整数K和A.如果K + xA和K + yA哈希到相同的数字mod m,然后(xy)A必须是0 mod m。如果m是素数,这只能在A = 0 mod m或x = y mod m时发生,因此一次以m为单位。但是如果m = pq并且A碰巧可以被p整除,则每当x-y被q整除时就会发生碰撞,这通常是因为q<米。
我估计接近2的幂,因为内存管理系统可能很容易拥有最终大小的内存块 - 我真的不知道。如果你真的在乎,如果你有时间,你可以尝试不同的素数和一些有代表性的数据,看看哪些是实践中最好的。