1
在二次时间发现相似的向量
让 d:{0,1}k×{0,1}k→Rd:{0,1}k×{0,1}k→Rd:\{0,1\}^k\times \{0,1\}^k \to \mathbb{R}是我们称为相似函数的函数。相似度函数的例子有余弦距离,l2l2l_2 范数,汉明距离,Jaccard相似度等。 考虑 nnn 长度的二进制向量 kkk: v⃗ ∈({0,1}k)nv→∈({0,1}k)n\vec{v} \in (\{0,1\}^k)^n。 我们的目标是对相似的向量进行分组。更正式地说,我们要计算一个相似度图,其中节点是向量,边表示相似的向量(d(v,u)≤ϵd(v,u)≤ϵd(v,u) \leq \epsilon)。 nnn 和 kkk 是非常大的数字,并且比较两个长度 kkk 向量很昂贵,我们不能做所有的蛮力 O(n2)O(n2)O(n^2)操作。我们想要用更少的操作来计算相似度图。 这可能吗?如果不能,我们可以计算出一个近似图,其中包含相似图中的所有边加上最多O(1)O(1)O(1) 其他边缘?