一尘不染

为什么在许多GetHashCode实现中进行异或运算之前要乘以质数?

algorithm

我了解在异或之前进行大量乘法运算应该有助于处理分布较差的操作数,但是为什么乘法器应该是质数呢?


阅读 497

收藏
2020-07-28

共1个答案

一尘不染

Computing Life博客上有一篇很好的文章,详细讨论了此主题。它最初是作为对我在问题中链接到的JavahashCode()问题的答复而发布的。根据这篇文章:

质数是唯一数字。它们的独特之处在于,由于使用了素数来构成素数,因此素数与任何其他数字的乘积具有唯一性的最大可能性(不像素数本身那样唯一)。此属性在哈希函数中使用。

给定字符串“ Samuel”,您可以通过将每个组成数字或字母乘以质数并将它们相加来生成唯一的哈希。这就是使用素数的原因。

但是,使用素数是一种古老的技术。此处的密钥是要理解的,只要您可以生成足够唯一的密钥,就可以使用其他哈希技术。在这里可以找到有关无素散列的更多信息。

2020-07-28