通用哈希,同一个key应该得到相同的hash值?
Universal hashing, should get the same hash value for the same key?
我的意思是,我已经使用这个表达式实现了一个通用哈希函数:
h(k) = ((a*k + b)mod p)mod m; (来自科门)
其中:
-p 是大于 k 的大质数;
-a 和 b 是随机选择的两个数字,第一个在 [1, p-1] 范围内,第二个在 [0, p-1].
范围内
现在,我实现了这个,对于随机函数,我选择了等于 k 的种子。那是因为,如果我不这样做,当我用键 k 插入一个值时,它会生成一个哈希值,这将取决于 Random 函数的默认种子(可能是时间)。所以如果我想再次搜索密钥,我不能这样做,因为现在通用哈希函数 returns 我另一个值。所以,如果你能告诉我我的推理是否正确,我将不胜感激。
我的疑惑是,现在这样做,如果两个元素有相同的键,它们将被无限制地存储在同一个链表中(我不知道它是否正确)。
提前致谢。
我认为您对通用哈希的工作原理有点误解。与其在每次计算哈希时随机选择 a
和 b
,不如在进行任何哈希之前,select 随机选择 a
和 b
.一旦你这样做了,每次你需要计算散列时,根据输入值 k
和你输入的值 a
和 b
使用上面的公式计算它最初选择。
我的意思是,我已经使用这个表达式实现了一个通用哈希函数:
h(k) = ((a*k + b)mod p)mod m; (来自科门)
其中: -p 是大于 k 的大质数; -a 和 b 是随机选择的两个数字,第一个在 [1, p-1] 范围内,第二个在 [0, p-1].
范围内现在,我实现了这个,对于随机函数,我选择了等于 k 的种子。那是因为,如果我不这样做,当我用键 k 插入一个值时,它会生成一个哈希值,这将取决于 Random 函数的默认种子(可能是时间)。所以如果我想再次搜索密钥,我不能这样做,因为现在通用哈希函数 returns 我另一个值。所以,如果你能告诉我我的推理是否正确,我将不胜感激。 我的疑惑是,现在这样做,如果两个元素有相同的键,它们将被无限制地存储在同一个链表中(我不知道它是否正确)。
提前致谢。
我认为您对通用哈希的工作原理有点误解。与其在每次计算哈希时随机选择 a
和 b
,不如在进行任何哈希之前,select 随机选择 a
和 b
.一旦你这样做了,每次你需要计算散列时,根据输入值 k
和你输入的值 a
和 b
使用上面的公式计算它最初选择。