八叉树的近似最近邻算法

时间:2014-05-07 03:25:15

标签: algorithm computational-geometry nearest-neighbor

有没有人知道八面体这种近似最近邻技术的起源(纸张,书籍等)?:

http://www.cs.ucdavis.edu/~amenta/w11/nnLecture.pdf

我无法从提供的伪代码中实现它。我也很难找到该技术的原始出版物,我希望有更多细节。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

这不是确切的答案,而是近似的(使用主题的条款:))。

写一个评论太大了,我认为这是一个很好的信息。

该论文提到Voronoi图不会扩展到高于3的维度,它暗示了八叉树。就术语而言,这是错误的。

八叉树在R ^ 3中定义。简单地说,你在2D中看到这种数据结构,我们有quadtree 这类树每个节点有2 ^ D个孩子 ,其中D是维度。这意味着:

 1. 2D: 2^D children per node, i.e. 4 children per node.

 2. 3D: 2^D children per node, i.e. 8 children per node.

 3. and so on.

例如,octree来自希腊词octo,意思是8,它意味着这棵树每个节点有8个孩子。

我已经为NN(最近邻)实现了这种树,尽管我已经使树成为多态的,不会浪费任何数量的内存,但这不会超过10维。< / p>

此外,该文件还提到了kd-trees。请注意,当维度变高时,查询时间不再是O(logn),但它会略强于强力逼近(即检查所有点)。尺寸越大,kd-trees执行的越差。

kd-tree实际上是嵌入在几何中的二叉树。我的意思是,每个节点都有两个子节点,在每个级别,我们将数据集减半(通常在具有最大方差的坐标的中间值,以便我们可以利用数据集的结构)。这将成为一棵完美的树。

enter image description here 在这里你可以看到kd-tree,我的一个朋友,在8D中得到了64分。在这个版本中,我们每叶存储4个点。

方框中的数字是指点数(从1开始, 即test.points文件中的行号。)

符号“8 @ 0.532”是指内部节点,数据是 沿着第八维分裂为0.532(再次,尺寸从 1,为了便于人类理解)。

这就是为什么,我们倾向于对近似NN 感兴趣,这意味着我们在准确性方面付出了一些损失,但我们获得了一些加速。 (你可能知道,一切都是权衡)。

通过 Box ,它可能意味着minimum bounding box

这很简单,这是一个例子:

假设您在2D中拥有此数据集:

-1 -2
 0  5
 8 -5

为了构建边界框,我们需要在每个维度中找到最小和最大坐标。请注意,对于存储Boudning框,它足以存储其最小和最大角落。

在这里,我们有min = (-1, -5) and max = (8, 5)。然后,边界框,矩形,按顺时针顺序形成 - 从最大角落开始,即带有角落的那个:

( 8,  5)  // ( max.x, max.y)
( 8, -5)  // ( max.x, min.y)
(-1, -5)  // ( min.x, min.y)
(-1,  5)  // ( min.x, max.y)

观察,数据集的所有点都位于此边界框内。

至于论文,它实际上是一个讲座,而不是一篇论文。它没有解释应该如何编写算法。此外,它没有提供任何独特的信息,以便尝试找到另一个.pdf,更详细地解释链接中的.pdf。

OP的评论

[EDIT]。

1)问:dequeue box B, containing representative point p

我想说,出队,意味着提取队列的“第一”元素。入队,意味着推回队列中的元素。队列接缝将边界框保存为元素。

2)问:r = d(q,B)

也许,他的意思是从框中包含的代表点。不清楚。

您可以计算从查询点到框的最近角落的(欧几里德)距离,或计算框的代表。

3)for all children B' of B containing points in P

P是数据集。每个框都在每个级别的8个子框中分区(在八叉树的情况下)。

4)问:while dN >= (1+e)r do

逼近错误e,实际上就是我们所说的epsilon。它通常是一个参数,它意味着,当你检查:

while delta >= r do

你不那么严格,你做

while delta >= (1 + e)*r do

这意味着你进入循环的次数少于上面的确切条件。 因此,我认为,要在队列中插入方框B的每个子框。这不是那么聪明,恕我直言。

关于e = 0.01的最后一条评论,只需在上述条件下进行数学计算。您会看到答案是否定的,因为当您发布状态链接时,e是一个乘法因素。

相关问题