Hamming Distance

问题:给定 \(d\) 维 01 向量集合和若干次问询,每次问询求出最小 Hamming Distance 的 \(c-\)近似.

人类智慧:在对字符串做随机排列意义下,Hamming Distance 小意味着 LCP 有较高概率大.

所以考虑随机 \(M\) 个排列,然后对于每个排列,问询时求出 LCP 最大的。然后比较这 \(M\) 则结果即可.

\(M\) 要取在 \(O(n^{\frac{1}{c}})\). 下面是分析.

令答案为 \(r\)\(p_1=1-r/d\)\(p_2=1-cr/d\)\(k=\log_{p_2}(1/n)\). 那么对于集合中的 \(q'\) 和问询点 \(q\),若距离 \(>cr\),则在两者 LCP \(\ge k\) 的概率至多 \(p_2^k=1/poly(n)\).

而另一方面,最优点和询问点 LCP \(\ge k\) 的概率为 \(p_1^k=1/n^{\frac{1}{c}}\). 于是令 \(M=O(n^\frac{1}{c})\) 就能大概率使得存在一个排列使得两点 LCP \(\ge k\).

Sim Hash

Cosine Similarity:对于两个向量 \(x,y\),定义他们的 Cosine Similarity 为两者的夹角的 Cosine 值,即 \(\frac{x\cdot y}{|x||y|}\).

我们想要找到一个函数 \(H(x)\),使得 \(Pr(H(x)=H(y))\) 能反应两者的距离.

考虑取随机向量 \(w\),令 \(H(x)=\operatorname{sgn}(w\cdot x)\). 分析一下即可知道 \(Pr(H(x)=H(y))\) 等于 \(1-\theta/\pi\).

若我们随机取 \(T\) 个独立的这样的 \(H(x)\),那么每个向量就变成了一个 01 向量,然后距离也就转化为了上面的 Hamming 距离.

Locality Sensitive Hashing

给出一个一般化的 Locality Sensitive Hashing:

  • \({\mathbb R}^{d}\)向量空间中,LSH 为一族随机哈希函数 \(H\),满足:
  • \(||x-y||\le r\)\(x,y\)\(Pr(H(x)=H(y))\ge p_1\).
  • \(||x-y||\ge cr\)\(x,r\)\(Pr(H(x)=H(y))\le p_2\).

对于这样的 Hashing,定义 \(\rho=\frac{\log p_1}{\log p_2}\). 那么有了这个 Hashing,我们就能在 \(O(n^{1+\rho})\) 预处理 \(O(n^{\rho})\) 查询的时间复杂度下解决 \(c-\)近似的判定问题.

所以 LSH 的目标就是设计一个哈希,使得 \(\rho\) 尽量小.

上面提到的 Hamming 空间的 LSH 就有 \(\rho\le O(1/c)\).

而比如单位球空间上欧式空间中,若使用上述的 Sim Hash,那么也有 \(\rho\le O(1/c)\).

一个更好的算法是,对向量做随机旋转(即被随机旋转矩阵 \(M\) 作用),然后返回最近的标准基单位向量. 然后若干个这样的独立的 LSH 拼接得到最终的 LSH. 这样的 \(\rho\le O(1/c^2)\).