我试图了解通用散列相对于普通散列的有用性,除了函数每次随机生成,阅读 Cormen 的书。
根据我对通用散列的理解,我们选择要使用的函数
H(x)=[(ax+b)mod p]mod m
其中 p 是大于所有键的素数,m 是数据表的大小,a,b 是随机数。
因此,例如,如果我想读取 80 个人的 ID,并且每个 ID 的值介于 [0,200] 之间,那么 m 将是 80,p 将是 211(下一个素数)。对?我可以使用该功能让我们说
H(x)=[(100x+50)mod 211]mod 80
但为什么这会有所帮助?我很有可能最终会有很多空位,无缘无故地占用空间。降低数字 m 以获得更小的表不是更有用,这样空间就不会无缘无故地使用吗?
任何帮助表示赞赏