【发布时间】:2014-09-11 11:52:09
【问题描述】:
对于整数数组,什么是好的散列函数? 例如,我有两个数组 [1,2,3] 和 [1,5]。我应该采用什么散列函数来分离这两个数组? 我想在将每个元素提高到 2 的幂后将其相加,但由于多次乘法,这会带来很大的成本。这种场景有没有简单的散列函数?
【问题讨论】:
标签: hash
对于整数数组,什么是好的散列函数? 例如,我有两个数组 [1,2,3] 和 [1,5]。我应该采用什么散列函数来分离这两个数组? 我想在将每个元素提高到 2 的幂后将其相加,但由于多次乘法,这会带来很大的成本。这种场景有没有简单的散列函数?
【问题讨论】:
标签: hash
对于那个特定的数据集,只需从倒数第二个项目中减去一个,这将为您提供完美的最小哈希值,并生成存储桶 0 和 1 :-)
更严重的是,一个好的散列函数的选择确实很大程度上取决于数据的种类,因此应该考虑到这一点。在不知道您将要存储的数据的属性的情况下,很难提出建议。
我会开始简单地选择一个任意函数,例如添加数组中的所有项目,然后将数组长度添加到其中,并以某个值为模减少它:
numbuckets = 97
bucket = array.length() % numbuckets
for index in range (array.length()):
bucket = (bucket + array[index]) % numbuckets
然后检查结果(跨越大量真实数据集)以确保没有太多冲突。如果有,请选择其他功能。
这与优化相同:衡量,不要猜测!实际上监控冲突和使用情况,如果出现问题就采取行动。
【讨论】: