我正在用Java编写minhashing算法,该算法要求我生成任意数量的随机哈希函数(在我的情况下为240个哈希函数),并通过它运行任意数量的整数(目前为2000)。

为了做到这一点,我一直在为240个哈希函数中的每一个生成随机数a,b和c(范围为1-2001)。然后,我的哈希函数返回h =((a * x)+ b)%c,其中h是返回值,x是遍历该整数的整数之一。

这是随机散列的有效实现,还是有更通用/可接受的方式呢?

这篇文章在问一个类似的问题,但是答案的措词让我有些困惑:Minhash implementation how to find hash functions for permutations

最佳答案

几年前,当我使用Bloom过滤器时,遇到了一篇文章,描述了如何使用最少的代码非常简单地生成多个哈希函数。他描述的方法效果很好。参见Less Hashing, Same Performance: Building a Better Bloom Filter

基本思想是创建两个哈希函数,分别命名为h1h2,然后您可以使用以下公式模拟多个哈希函数,即g1gk:

gi = h1(x) + i*h2(x)
i从1到k(所需的哈希函数数)不等。

即使您决定不执行他的想法,该论文也很值得阅读。尽管阅读完之后我无法想象不想实现它。它使我的Bloom过滤器代码更易于处理,并且对性能没有负面影响。

10-04 18:00