没有碰撞的3 int的Hashcode

时间:2018-06-10 13:26:04

标签: hashcode

你能帮我找到计算具有3个int参数的类的哈希码的最佳方法(比方说abc),每个参数可能都有值在预定范围内?我的意思是a应该在a1a2b的某个范围内,相应地从b1b2c你可以从c1c2猜测。所有这些a1,a2,b1 ......都是常量的,并且在哈希码构建时是已知的。我希望避免碰撞。

1 个答案:

答案 0 :(得分:1)

首先,确保变体的总数 - 产品(a2 - a1) * (b2 - b1) * (c2 - c1)符合您的哈希码容量。如果要使用32位unsigned int,则该值应小于2^32

通过选择一些初始值s开始构造哈希码(您可以选择零,从而有效地省略初始值)。然后为每个参数执行以下操作:

  1. 将当前哈希码值乘以当前参数范围(即a2 - a1
  2. 将当前调整到范围参数值添加到哈希码值
  3. 对于你的三个参数的情况,公式是

    ((s*(a2 - a1) + (a - a1))*(b2 - b1) + (b - b1))*(c2 - c1) + (c - c1)

    其中s是可选的起始值

    修改

    Param值应调整到其范围