【发布时间】:2020-08-04 01:19:31
【问题描述】:
我很难理解散列的目的。我对算法知之甚少,但我对了解最近邻搜索的局部敏感散列很感兴趣。给定一个半径r和一个常数c>1,我们必须预处理一些数据点{p1,..., pn},这样当给定一个点q时,如果在r与q的距离内有一个点p ,我们将从{p1,...,pn} 返回一个位于cr 与q 之间的点。为什么散列在这种情况下有用?
【问题讨论】:
我很难理解散列的目的。我对算法知之甚少,但我对了解最近邻搜索的局部敏感散列很感兴趣。给定一个半径r和一个常数c>1,我们必须预处理一些数据点{p1,..., pn},这样当给定一个点q时,如果在r与q的距离内有一个点p ,我们将从{p1,...,pn} 返回一个位于cr 与q 之间的点。为什么散列在这种情况下有用?
【问题讨论】:
局部敏感性散列用于将相似的输入项以高概率散列到相同的“桶”中。我不确定您在原始问题中对 LSH 的定义,我从未见过以这种方式定义它。特别是,“很有可能”这句话对于了解 LSH 为何有用非常重要。
在高层次上,LSH 与典型的散列函数相反。使用典型的散列函数,我们希望松散地保证最小的桶冲突,即使/特别是对于类似的输入项。此属性对于构建产生高效操作的哈希表很有用。
在 LSH 中,目标是产生一个散列函数,使得当 p1 和 p2 是“接近”,其中接近由给定的度量或距离(通常是 L1 或 L2)定义。类似地,不接近的两个点 p1 和 p2 应该很有可能落入不同的桶中。
举一个用于构造 LSH 的函数族的典型示例,函数
f(x) = 1 if dot(x,r) > 0 else 0
r 来自 d 维正态分布。绘制m 这样的函数将产生m 位哈希。使用 n 这样的 m 位哈希将产生一个基本 LSH,可用于在给定度量(通常是 L1 或 L2)下近似地找到最近的邻居。
【讨论】: