首页 > 解决方案 > 3 int 的哈希码没有冲突

问题描述

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

标签: hashcode

解决方案


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

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

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

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

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

哪里s是可选的起始值

编辑

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


推荐阅读