修改此算法以进行最近邻搜索(NNS)以执行近似NNS

时间:2014-09-11 14:29:47

标签: algorithm search nearest-neighbor kdtree approximate-nn-searching

从课程的幻灯片中,我发现了这些:

给定R ^ D中的集合P和查询点q,它的NN是P中的点p_0,其中:

dist(p_0, q) <= dist(p, q), for every p in P.

类似地,近似因子1> ε&gt; 0,ε-NN是p_0,这样:

dist(p_0, q) <= (1+ε) * dist(p, q), for every p in P.

(我想知道为什么ε不能达到1)。

我们构建了一个KD树,然后我们用这个算法搜索NN: enter image description here 这是正确的,就我的想法和我的测试而言。

如何修改上述算法,以便执行近似最近邻搜索(ANNS)?

我的想法是将当前最佳(在叶子中的更新部分)乘以ε,并保持算法的其余部分不变。不过我不确定这是否正确。有人可以解释一下吗?

PS - 我理解搜索NN的工作原理。

请注意,我在计算机科学网站上asked,但我一无所获!

1 个答案:

答案 0 :(得分:2)

所需的一项修改是将current best distance替换为current best distance/(1+ε)。这会修剪不能包含违反新不等式的点的节点。

这有效的原因是(假设cut-coor(q)在左侧)测试

cut-coor(q) + current best distance > node's cut-value

正在检查分隔left-childright-child的超平面是否比current best distance更近,这是right-child中某点更接近的必要条件到查询点q,因为加入q的线段和right-child中的点通过该超平面。将d(p_0, q) = current best distance替换为current best distance/(1+ε),我们会检查右侧是否有任何点p可以满足

d(p, q) < d(p_0, q)/(1+ε),

相当于

(1+ε) d(p, q) < d(p_0, q),

是违反近似邻近保证的证人。