基于:在局部敏感哈希中搜索 https://stackoverflow.com/questions/37377042/search-in-locality-sensitive-hashing读完后我会这么说舍入算法的相似性估计技术 http://www.cs.princeton.edu/courses/archive/spr04/cos598B/bib/CharikarEstim.pdf:
这个问题在某种程度上很广泛,所以我将在这里给出一个最小(抽象)的例子:
我们有 6 (=n
) 数据集中的向量,其中d
每个位。假设我们做了 2 (=N
) 随机排列。
让第一个随机排列开始!请记住,我们排列the bits, 不是向量的顺序。排列位后,它们保持顺序,例如:
v1
v5
v0
v3
v2
v4
现在是查询向量,q
,到达,但(几乎)不太可能是same在我们的数据集中有一个向量(排列后),因此我们不会通过执行二分搜索找到它。
然而,我们最终会处于两个向量之间。所以现在我们可以想象场景是这样的(例如q
位于 v0 和 v3 之间:
v1
v5
v0 <-- up pointer
<-- q lies here
v3 <-- down pointer
v2
v4
现在我们向上或向下移动指针,寻找与最多位匹配的 vi 向量q
。假设它是 v0。
类似地,我们进行第二次排列并找到向量 vi,假设为 v4。我们现在比较第一个排列中的 v0 和 v4,看看哪个最接近q
,即哪一个具有最多的位等于q
.
但是,如果您正在寻求现成的实施,您应该询问软件推荐 https://softwarerecs.stackexchange.com/。我还会查看我链接到的论文,看看作者是否公开了代码,或者他们是否愿意在联系他们后分享代码。