我正在用Java编写minhashing算法,该算法要求我生成任意数量的随机哈希函数(在我的情况下为240个哈希函数),并通过它运行任意数量的整数(此刻为2000)。
为了做到这一点,我一直在为240个哈希函数中的每一个生成随机数a,b和c(范围为1-2001)。然后,我的哈希函数返回h =((a * x)+ b)%c,其中h是返回值,x是遍历该整数的整数之一。
这是随机哈希的有效实现,还是有更通用/可接受的方式呢?
这篇文章在问一个类似的问题,但是答案的措辞让我有些困惑:Minhash实现如何找到排列的哈希函数
几年前,当我使用Bloom过滤器时,遇到了一篇文章,描述了如何使用最少的代码非常简单地生成多个哈希函数。他描述的方法效果很好。见少散列,同样的性能:建立一个更好的布隆过滤器。
基本思想是创建两个哈希函数,分别将其称为h1
和h2
,然后可以使用,g1
通过gk
使用以下公式来模拟多个哈希函数:
gi = h1(x) + i*h2(x)
i
从1到k
(所需的哈希函数数)之间变化。
即使您决定不执行他的想法,该论文也很值得阅读。尽管阅读完之后我无法想象不想实现它。它使我的Bloom过滤器代码更易于处理,并且对性能没有负面影响。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句