是否存在一种满足以下等式的哈希:
Hash(Hash(X)+Y) = Hash(X+Y)
上下文:
我正在使用必须跨领域同步的仅附加数据库。
为了保证同步按预期发生,我们对两个数据库进行哈希处理并进行比较。
由于数据库有点庞大,我们使用的哈希函数需要花费大量宝贵的时间来计算。所以我想知道:如果我已经有了给定数据 X 和新数据 Y 的散列,如果我可以只散列 Y 并“合并”散列,我可以节省很多时间......
最佳答案
给定一个模 M
,我们可以取 Hash(X) = X mod M
。然后
Hash(Hash(X) + Y) = ((X mod M) + Y) mod M = (X + Y) mod M = Hash(X + Y).
这不是一个很好的散列函数,但是,与目前针对 Hash
的其他建议不同,它并非完全无用。
它本质上也是唯一的建议,因为通过替换 Y = Z - Hash(X)
,我们得到
Hash(Z) = Hash(Z + (X - Hash(X))),
因此 Hash
在将 X - Hash(X)
的整数倍添加到其参数下不变,因此在将 G 的最大公约数的倍数添加下保持不变
of X - Hash(X)
for all X
。此外,由于 G
划分 X - Hash(X)
,因此 Hash
在域 0 上是一对一的..G-1
.
关于algorithm - 互补哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26235947/