hashcode - 3 int 的哈希码没有冲突
问题描述
您能帮我找到为具有 3 个 int 参数(比如说a
, b
, c
)的类计算哈希码的最佳方法,并且每个参数的值都可能在预定义的范围内吗?我的意思是a
应该在某个范围 from a1
to a2
,b
相应地 from b1
tob2
和c
你可能猜到的 from c1
to c2
。所有这些 a1、a2、b1... 都是常量,并且在构建哈希码时是已知的。我希望避免碰撞。
解决方案
首先,确保变体总数 - 产品(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
是可选的起始值
编辑
添加的参数值应调整到其范围
推荐阅读
- ladder-logic - 如何在 Scheinder 梯形程序中使用 SYSTIMEDATE
- python - ModuleNotFoundError:运行 Pyinstaller 时没有名为 PIL 的模块
- r - 比较两个数据帧之间的纬度和经度
- swift - 如何更改 Xcode 为每个堆栈创建单独的预览?
- python - Python:AttributeError:模块'kubernetes'没有属性'config'
- vimeo - vimeo API 如何进行批量请求
- reactjs - 如何生成动态 React 标记
- node.js - 公牛在第一次之后没有增加新的工作
- vue.js - 如何将本地存储值传递给控制器 laravel?
- android - 如何为提示和错误文本应用不同的颜色 | 材料设计文本字段