algorithm - 为什么我们在Universal Hashing中选择随机哈希函数

标签 algorithm hash

根据 Universal Hashing 的定义,选择一个随机哈希函数以获得良好的最坏情况保证。但我无法理解它是如何工作的。

假设如果我选择一些随机哈希函数 h ,仍然有可能以最差的元素集结束。

请用简单的语言解释。

我看过视频https://www.youtube.com/watch?v=s7QSM_hlS1U .但是很难理解

最佳答案

你是对的:使用随机哈希函数并不能 100% 防止你以最坏情况集结束。但是在您提供的讲座中,主要担心的是敌人可能能够预测总是屈服于最坏情况的输入。

作为一个例子,他使用了一个必须为您的哈希表选择基准的竞争对手。在运行时不使用随机散列函数,他会知道你使用的散列函数,并且可以预测哪些键会产生相同的散列值,从而将散列表转换为链表(因为每个键都分配给同一个桶) .确定性哈希函数具有可预测的最坏情况结果的风险,这在对手环境中尤其糟糕。

通过在运行时使用随机哈希函数,即使敌人选择了基准,你也有一定的概率保证不会发生碰撞。 更具体地说,当你有值 x 和 y(其中 x != y)并且你从 m 个不同的哈希函数 H 中选择一个函数 h,那么(非常直观地)h(x) = h(y) 是 AT 的概率LEAST 小于 1/m,即 1/m 设置概率上限。确定性哈希函数无法为您提供此属性。

另见 here

关于algorithm - 为什么我们在Universal Hashing中选择随机哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28266176/

相关文章:

c# - 查找重复序列

algorithm - 逐步求余数

ruby - 从 Ruby 中的 MongoDB 嵌套哈希中提取正确的字符串

algorithm - 平均 ARGB 颜色整数的最快/最简单方法?

c# - 为什么同一设计会得到两种不同的结果?

java - 高效的 Minkowski 和计算

C - 具有 n 个 unsigned int 属性的哈希结构

jquery - 在 jQuery 中更改哈希值而无需重新加载

c# - Java 中的无符号运算符

ruby - Ruby 哈希的括号语法