Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为LSH-Minhash算法生成随机Hash函数_Java_Algorithm_Hash_Locality Sensitive Hash_Minhash - Fatal编程技术网

Java 为LSH-Minhash算法生成随机Hash函数

Java 为LSH-Minhash算法生成随机Hash函数,java,algorithm,hash,locality-sensitive-hash,minhash,Java,Algorithm,Hash,Locality Sensitive Hash,Minhash,我正在用Java编程一个minhashing算法,它要求我生成任意数量的随机哈希函数(在我的例子中是240个哈希函数),并通过它运行任意数量的整数(目前是2000个) 为了做到这一点,我已经为240个散列函数中的每一个生成了随机数a、b和c(从范围1到2001)。然后,我的散列函数返回h=((a*x)+b)%c,其中h是返回值,x是通过它运行的整数之一 这是一种有效的随机散列实现,还是有一种更常见/更可接受的实现方法 这篇帖子问了一个类似的问题,但我仍然对答案的措辞有些困惑:所以我上面描述的方法

我正在用Java编程一个minhashing算法,它要求我生成任意数量的随机哈希函数(在我的例子中是240个哈希函数),并通过它运行任意数量的整数(目前是2000个)

为了做到这一点,我已经为240个散列函数中的每一个生成了随机数a、b和c(从范围1到2001)。然后,我的散列函数返回h=((a*x)+b)%c,其中h是返回值,x是通过它运行的整数之一

这是一种有效的随机散列实现,还是有一种更常见/更可接受的实现方法


这篇帖子问了一个类似的问题,但我仍然对答案的措辞有些困惑:

所以我上面描述的方法几乎是正确的。数字a和b应随机生成。但是,c需要是一个略大于最大可能值x的素数。一旦选择了这些数字,使用h=((a*x)+b)%c查找散列值h是生成散列函数的标准、可接受的方法


此外,a和b应该是从1到c-1的随机数。

几年前,当我使用Bloom过滤器时,我读到一篇文章,描述了如何以最少的代码非常简单地生成多个哈希函数。他描述的方法非常有效。看

基本思想是创建两个散列函数,分别称为
h1
h2
,然后使用以下公式模拟多个散列函数,
g1
gk

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


这篇论文很值得一读,即使你决定不实施他的想法。尽管读过之后,我无法想象不想实现它。它使我的Bloom filter代码更加易于处理,并且不会对性能产生负面影响。

计算机从来都不是随机的。它们是伪随机的。这听起来像是一个学术问题,因此可能值得注意它们之间的区别。也可以尝试
bottom-k
hashing,即只使用一个hash函数,但保留
k
最小值,而不是只保留一个。