假设您有一个有序的位集序列b1, b2, b3, ..., bN
。
是否有一个有效的按位运算符哈希计算,可用于生成也是关联的哈希值?
换句话说,推荐的散列函数hash(bX, bY)
是这样的:
hash(hash(b1, b2), b3) == hash(b1, hash(b2, b3))
按位异或 - XOR
会提供可接受的低冲突率吗?
编辑:请注意,有一个相关问题here。
答案 0 :(得分:1)
XOR是关联的,但也是可交换的。它不仅仅是你需要的,但我没有想到一个实用的纯粹联想变体。我想到了矩阵乘法,但我不确定如何使用二进制哈希。
添加也是关联的,因此您可以执行组合哈希:保留两个不同的哈希值,一个与加法相结合,一个与XOR相结合。碰撞必须影响两者都是有效的碰撞。更有可能。
缺点是hash(a, b) == hash(b, a)
(这是交换性)。不知道如何删除该属性。