【问题标题】:Hash function for an array of integers整数数组的哈希函数
【发布时间】:2014-09-11 11:52:09
【问题描述】:

对于整数数组,什么是好的散列函数? 例如,我有两个数组 [1,2,3] 和 [1,5]。我应该采用什么散列函数来分离这两个数组? 我想在将每个元素提高到 2 的幂后将其相加,但由于多次乘法,这会带来很大的成本。这种场景有没有简单的散列函数?

【问题讨论】:

    标签: hash


    【解决方案1】:

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

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

    我会开始简单地选择一个任意函数,例如添加数组中的所有项目,然后将数组长度添加到其中,并以某个值为模减少它:

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

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

    这与优化相同:衡量,不要猜测!实际上监控冲突和使用情况,如果出现问题就采取行动。

    【讨论】:

    • 谢谢,对于我目前的用例,它似乎很好。但是如果我需要进一步扩展它,我想我可能会遇到更多的碰撞
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2021-12-20
    • 2011-12-30
    • 2017-09-30
    • 2014-06-27
    相关资源
    最近更新 更多