java哈希随机取_java–为LSHMinhash算法⽣成随机哈希函数我正在⽤Java编写⼀个minhashing算法,它要求我⽣成任意数量的随机散列函数(在我的情况下为240个散列函数),并通过它运⾏任意数量的整数(⽬前为2000).
为了做到这⼀点,我⼀直在为240个散列函数中的每⼀个⽣成随机数a,b和c(从1到2001的范围).然后,我的哈希函数返回h =((a * x)b)%c,其中h是返回值,x是通过它运⾏的整数之⼀.
这是随机散列的有效实现,还是有更常见/可接受的⽅式来实现它?
解决⽅法:
⼏年前,当我使⽤Bloom过滤器时,我遇到了⼀篇⽂章,该⽂章描述了如何使⽤最少的代码⾮常简单地⽣成多个哈希函数.他描述的⽅法⾮常有效.见Less Hashing, Same Performance: Building a Better Bloom Filter.
基本思想是创建两个哈希函数,称之为h1和h2,然后使⽤以下公式模拟多个哈希函数g1到gk:
gi = h1(x) + i*h2(x)
我从1到k(你想要的散列函数的数量)变化.
即使你决定不实施他的想法,这篇论⽂也值得⼀读.虽然在阅读之后我⽆法想象不想实现它.它使我的Bloom过滤器代码更易于处理,并且不会对性能产⽣负⾯影响.
标签:java,algorithm,hash,locality-sensitive-hash,minhash
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论