Similarity Search in High Dimension via Hashing LSH 算法: 1、算法思想:将高维空间中的元素视为点并赋以坐标值,坐标值为正整数
通过一族哈希函数将空间所有点映射到n 个哈希表i 中,n=||,即每个哈希函数f对应一个哈希表,每个哈希表都存放着空间所有的点
对于给定的查询子q,分别计算1 ( )f q 、2 ( )fq 、…、( )nfq ,if ,i=1,2,…,n
以所有( )if q 落入的哈希表i 中的桶中所有点作为候选集,比较其与q 之间的距离,选出距离最近的K 个点(K-NNS)
2、算法步骤 (1)预处理:对于任意一点pP,P 为d 维空间
设p={1x ,2x ,…,dx },将空间P 映射到d维Hamming 空间d ,映射方法如下: Ppp, p =cUnary (1x )cUnary (2x )…cUnary (dx ) 其中cUnary (ix )表示ix 个1 紧跟C-ix 个0,C 表示空间P 中任意点 p坐标的最大值
这种映射是保距的,即p,qP,1 ( , )dp q =( , )Hdp q
其中1d 表示定义在空间P 上1l 准则下的欧几里得距离,Hd表示定义在d空间下的Hamming 距离
因此原问题——找出空间P 中与查询子q 距离最近的K 个点——转化为在d 空间中的-NNS 问题
在算法实现中,并没有显式将p 转化为p ,而是用别的计算方法利用了这种转化,使算法易于描述并且实现的时空效率高
下面定义哈希函数的过程中,p 代表了原始点的向量形式(即p ),即不会区分p 与p
(2)定义哈希函数族:定义I={1,2, …,d},定义正整数l ,取l 个I 的子集,分别记为1I ,2I ,…,lI
定义 p|I 为向量 p 在坐标集 I 上的