我的意思是,我使用这个表达式实现了一个通用的散列函数:
h(k)=((a * k + b)mod p)mod m; (来自Cormen)
其中: -p是大于k的大素数; -a和b是两个数字,随机选择范围[1,p-1]中的第一个和第二个[0,p-1]。
现在,我实现了这一点,对于随机函数,我选择了等于k的种子。这是因为,如果我不这样做,当我用键k插入一个值时,它将生成一个哈希值,这将取决于随机函数的默认种子(可能是时间)。因此,如果我想再次搜索密钥,我就无法执行此操作,因为现在通用散列函数会返回另一个值。所以,我很感谢你告诉我,我的推理是否正确。 我怀疑的是,现在这样做,如果两个元素具有相同的密钥,它们将不可避免地存储在同一个链表中(如果它是正确的,我不会理解的东西)。
提前致谢。
答案 0 :(得分:1)
我认为你对普遍哈希的工作方式有一点误解。不是在每次计算哈希时随机选择a
和b
,而是在完成任何哈希之前,选择随机a
和b
。完成此操作后,每次需要计算哈希值时,请根据输入值k
以及值a
和b
使用上面的公式计算它你最初选择的。