为具有高于特定阈值的jaccard相似性的向量生成相同的哈希代码



修改java中的hashCode((方法,使向量可以为jaccard相似度高于某个阈值的向量生成相同的hashCode,并具有良好的准确性

示例:

向量1:[1,1,0,0,1,0]矢量2:[1,1,0,0,0]

它们的jaccard相似性为:0.5

我如何修改Java中的hashCode((方法,使相似度为0.5及以上的向量可以进入同一个桶/或同一个hashCode?

注意:我不是用minhash-lsh和候选者对的方式来做的。它必须使用向量本身生成哈希代码

目标不是做得完美(这是不可能的(,而是尽可能准确。

会有这样的情况,向量A和B,B和C可以一起走,而A和C不能。散列函数必须将其映射到A与B,或B与C,或仅将A、B和C一起映射到

这是不可能的。Jaccard相似性是在两个或多个向量之间计算的,而哈希代码必须仅依赖于单个向量的内容。

您可以轻松地构造三个向量A、B和C,使(A、B(和(B、C(满足您的标准,这意味着这三个向量都会生成相同的哈希码,但(A、C(不会。

最新更新