一、由ANN进入Hash
NN,即最近邻(nearest neighbor),定义在一个数据集X中,查询点q的最近邻是NN(q)=argmin dist(q,x) 其中x∈X。直接的表示,即为KNN查询,也就是需要找到K个最近邻。一个点x和查询点q的距离取决于具体的查询问题。例如:d维空间的数据集,和欧式距离的场景。
在低维空间时,这些情况都可以得到有效解决(比如k-d tree算法)。然而,在大规模高维数据时,有些算法的计算消耗甚至比线性消耗还要大。所以,ANN(Approximate nearest neighbors)近似最近邻查询被提出,主要是从两个方面实现近邻查询。
- error-constrained nn
误差约束最近邻查询,包括(1+ε)-approximate 最近邻查询、R-near neighbor近邻查询 - time-constrained nn
时间约束最近邻查询,是限制查询时间。它的目标是实现返回的k个最近邻点尽可能的与实际近邻点相似,同时查询代价尽可能小。
那这和我们研究的哈希算法有什么关系呢?哈希是在ANN中广泛应用的一种解决方案。哈希方法是将参考点和查询点映射到目标对象,ANN从而转换为对目标对象或者一部分原始参考点的处理。
二、Hash执行ANN查询
第一部分中最后提到经哈希函数转换后,得到的目标对象,即为Hash码。
2.1 hash函数
哈希函数定义为y=h(x)