假设您有两个哈希H(A),H(B)并且您想将它们组合起来。我已经读过将两个散列组合起来的好方法是对XOR它们来说,例如XOR( H(A), H(B) ).
H(A)
H(B)
XOR
XOR( H(A), H(B) )
我发现的最佳解释在这些散列函数指南中简要介绍:
对具有大致随机分布的两个数字进行异或运算会得到另一个仍然具有大致随机分布的数字*,但现在取决于这两个值。 … * 在要组合的两个数字的每个位上,如果两个位相等,则输出 0,否则输出 1。换句话说,在 50% 的组合中,将输出 1。因此,如果两个输入位每个都有大约 50-50 的机会是 0 或 1,那么输出位也是如此。
你能解释一下为什么 XOR 应该是组合散列函数(而不是 OR 或 AND 等)的默认操作背后的直觉和/或数学吗?
假设均匀随机(1 位)输入,AND 函数输出概率分布为 75%0和 25% 1。相反,OR 是 25%0和 75% 1。
0
1
XOR 函数是 50%0和 50% 1,因此它有利于组合均匀概率分布。
这可以通过写出真值表来看出:
a | b | a AND b ---+---+-------- 0 | 0 | 0 0 | 1 | 0 1 | 0 | 0 1 | 1 | 1 a | b | a OR b ---+---+-------- 0 | 0 | 0 0 | 1 | 1 1 | 0 | 1 1 | 1 | 1 a | b | a XOR b ---+---+-------- 0 | 0 | 0 0 | 1 | 1 1 | 0 | 1 1 | 1 | 0
练习:两个 1 位输入有多少个逻辑函数a并且b具有这种均匀的输出分布?为什么 XOR 最适合您问题中所述的目的?
a
b