整数数组的哈希函数

时间:2014-09-11 03:29:35

标签: hash

对于整数数组,什么是好的哈希函数? 例如,我有两个数组[1,2,3]和[1,5]。我应该采用哪些哈希函数来分离这两个数组? 我想在将每个元素提升到2的幂之后将它们相加,但由于多次乘法,这与它相关的成本很高。这种情况是否有任何简单的散列函数?

1 个答案:

答案 0 :(得分:5)

对于那个特定的数据集,只需从倒数第二个项中减去一个,这将为您提供一个完美的最小哈希值,产生桶0和1: - )

更严重的是,选择良好的散列函数确实在很大程度上取决于数据类型,因此应该加以考虑。在不知道您要存储的数据的属性的情况下,很难提出建议。

我会启动,只需选择一个任意函数,例如在数组中添加所有项目,然后将数组长度添加到其中,并将其模数减去一些值:

numbuckets = 97
bucket = array.length() % numbuckets
for index in range (array.length()):
    bucket = (bucket + array[index]) % numbuckets

然后检查结果(跨很多真实的数据集)以确保没有太多的冲突。如果有,请选择其他功能。

与优化相同:衡量,不要猜测!实际上监控冲突和使用情况,如果情况变坏则采取行动。