Algorithm 为什么在最近邻搜索中使用哈希

Algorithm 为什么在最近邻搜索中使用哈希,algorithm,hash,Algorithm,Hash,我很难理解散列的目的。我对算法知之甚少,但我感兴趣的是了解最近邻搜索中的局部敏感哈希。给定半径r和常数c>1,我们必须预处理一些数据点{p1,…,pn},这样当我们得到一个点q时,如果在q的距离r内有一个点p,我们将从{p1,…,pn}返回一个点距离cr在q的范围内。为什么散列在这种情况下有用?本地敏感度散列用于将类似的输入项以高概率散列到相同的“bucket”中。我不确定你在最初的问题中对LSH的定义,我从来没有见过这样的定义。特别是,“高概率”这句话对于理解LSH为什么有用非常重要 在高层次

我很难理解散列的目的。我对算法知之甚少,但我感兴趣的是了解最近邻搜索中的局部敏感哈希。给定半径
r
和常数
c>1
,我们必须预处理一些数据点
{p1,…,pn}
,这样当我们得到一个点q时,如果在
q
的距离
r
内有一个点
p
,我们将从
{p1,…,pn}返回一个点
距离
cr
q
的范围内。为什么散列在这种情况下有用?

本地敏感度散列用于将类似的输入项以高概率散列到相同的“bucket”中。我不确定你在最初的问题中对LSH的定义,我从来没有见过这样的定义。特别是,“高概率”这句话对于理解LSH为什么有用非常重要

在高层次上,LSH与典型的哈希函数相反。对于典型的散列函数,我们希望松散地保证最小的bucket冲突,甚至/特别是对于类似的输入项。此属性可用于构造产生高效操作的哈希表

在LSH中,目标是产生一个散列函数,使得
d
维度空间中的两个点
p1
p2
p1
p2
为“闭合”时,以高概率落入同一个桶中,其中闭合由给定的度量或距离(通常为L1或L2)定义,两个不接近的点
p1
p2
很可能落入不同的桶中

为了给出用于构造LSH的函数族的典型示例,函数

f(x) = 1 if dot(x,r) > 0 else 0
根据
d
维正态分布绘制
r
。绘制
m
这样的函数将产生
m
位散列。使用
n
这样的
m
位散列将产生一个基本LSH,可用于在给定度量(通常为L1或L2)下近似查找最近邻