3 int 的哈希码没有冲突

Hashcode for 3 int without collisions

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

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

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

  1. 将当前哈希码值乘以当前参数范围(即 a2 - a1
  2. 将当前调整到范围参数值添加到哈希码值

对于三个参数的情况,公式为

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

其中 s 是可选的起始值

编辑

添加的参数值应调整到其范围