为什么人们使用带有素数c的hash(k)= c * k

时间:2017-01-10 09:10:18

标签: hash

给定整数m,T上定义的散列函数是映射T -> {0, 1, 2, ..., m - 1}。如果kT的元素且m是正整数,则我们将hash(k, m)表示其散列值。

为简单起见,大多数哈希函数的格式为hash(k, m) = f(k) % m,其中f是从T到整数集的映射。

如果m = 2^p(通常用于模m操作很便宜)并且T是一组整数,我看到很多人使用{{1} f(k) = c * k是素数。

我了解如果您要选择c形式的函数,则每个哈希表大小f(k) = c * k需要gcd(c, m) = 1。即使使用素数符合账单,m也很好。

所以我的问题如下:为什么人们仍然使用c = 1作为哈希函数?它有什么好的属性?

1 个答案:

答案 0 :(得分:0)

你不需要它是素数。具有可证明的抗冲突性的最有效散列函数之一只是乘以随机数:https://en.wikipedia.org/wiki/Universal_hashing#Avoiding_modular_arithmetic。但你需要它是奇怪的。