(对于那些没有看过视频的人,这会在 20:45 左右出现)。
以这种方式定义的函数类是以下形式的函数
ha(x1, x2, x3, x4 sub>) = a1 x1 + a2 x2 + a3 x3 + a4 x4 (mod n)
其中n是桶的数量,每个xi在0到n-1的范围内,每个ai在0到n-1的范围内, n 是素数。
您的问题是为什么所有 xi 都必须小于 n。原因与证明这个哈希函数家族是通用的有关。正如 Tim 在视频中解释的那样,证明哈希函数是通用的方法之一是考虑两个不同的输入(称为 x 和 y)。这意味着它们必须在某些组件上有所不同,并且我们的想法是在不失一般性的情况下假设它们在第四个组件上有所不同。即 x4 ≠ y4。通过一些数学计算,在该假设下,您可以证明发生碰撞的概率等于该陈述为真的概率:
a4(x4 - y4) = a1(x1 - y1) + a2(x2 - y2) + a 3(x3 - y3) (mod n)
这里,由于我们随机选择了哈希函数,所有的ai都是随机的。关键的见解是,如果您将 a1、a2 和 a3 视为固定值,那么它的右侧方程只是一些固定的数字k。然后你对概率感兴趣
a4(x4 - y4) = k (mod n)
因为我们假设 n > x4, n > y4, x4 ≠ y4 ,并且 n 是素数。这告诉我们两个非常重要的事实:
x4 - y4 ≠ 0 mod n. 这是我们需要 n 大于的主要原因xi 的。我们马上就会知道原因。
-
x4 - y4 与 n 互质。 为什么?好吧,我们知道 n 是一个素数。由于 n > x4 和 n > y4,我们知道 x4 - y4 必须是严格的在 n-1 和 -(n-1) 之间。因为我们假设 n 是素数,所以在该范围内有 n 的非平凡除数,所以 x4 - y4 和 n 互素。
要了解为什么这些事实很重要,让我们考虑 k 的两种情况。首先,有可能 k = 0。在这种情况下,在什么情况下 a4(x4 - y4) = k (模式 n)?由于 x4 - y4 ≠ 0,我们知道只有当 a4 = 0 时才会发生这种情况。因为 a4 sub> 在 0 到 n-1 (含)范围内取均匀随机值,在这种情况下发生碰撞的概率是 1/n。
接下来,假设 k ≠ 0。在这种情况下,a4(x4 - y4) 会发生什么= k (mod n) 是真的吗?好吧,我们知道 x4 - y4 ≠ 0,所以它必须有一个乘法逆模 n 因为 x4 - y4 与 n 互质。事实上,它只有一个乘法逆元。唯一可能的选择 a4 会导致这一点是这样的选择 a4 是 x4 - y 的乘法逆4 模 n 乘以 k。在 0 到 n-1 范围内只有一个数字可以选择,所以选择它的概率是 1/n。
请注意,如果 x4 - y4 等于零模 n,则上述推理将不起作用。在第一种情况下,每一个选择一个4都会导致碰撞,所以碰撞概率是1。在第二种情况下,no选择 a4 可能会导致冲突,因此冲突概率将为 0。这些条件将使证明无效。
希望这会有所帮助!