你能帮我找到计算具有3个int参数的类的哈希码的最佳方法(比方说a
,b
,c
),每个参数可能都有值在预定范围内?我的意思是a
应该在a1
到a2
,b
的某个范围内,相应地从b1
到b2
和c
你可以从c1
到c2
猜测。所有这些a1,a2,b1 ......都是常量的,并且在哈希码构建时是已知的。我希望避免碰撞。
答案 0 :(得分:1)
首先,确保变体的总数 - 产品(a2 - a1) * (b2 - b1) * (c2 - c1)
符合您的哈希码容量。如果要使用32位unsigned int,则该值应小于2^32
。
通过选择一些初始值s
开始构造哈希码(您可以选择零,从而有效地省略初始值)。然后为每个参数执行以下操作:
a2 - a1
)对于你的三个参数的情况,公式是
((s*(a2 - a1) + (a - a1))*(b2 - b1) + (b - b1))*(c2 - c1) + (c - c1)
其中s
是可选的起始值
修改强>
Param值应调整到其范围