对于我的一个宠物项目,我想创建任意数量的不同整数哈希值。经过一番研究后,我认为通用散列是可行的方法。但是,我努力实现(numpy)。假设我尝试使用哈希族h(a,b)(x) = ((a * x + b) mod p) mod m
,我的x可以在uint32范围内的任何位置。然后选择p >= max(x)
和a, b < p
意味着在最坏的情况下a * x + b
不仅溢出uint32而且溢出uint64。我试图找到一个解决这个问题的实现,但只找到了加速模运算的巧妙方法,而不是溢出。
非常感谢任何有关如何实现这一点的建议。谢谢: - )
答案 0 :(得分:1)
(x + y) % z == ((x % z) + (y % z)) % z
。所以你可以在做总和之前取模数:
a
和x
投射到uint64。 (乘以两个uint32永远不会溢出uint64)。h = (a * x) % p + b
(h - p) if h > p else h
。 (或者:返回h % p
)