执行成本 跳过四叉树中的最近邻居搜索


10

注意:在我的回答中已经重提了这个问题:假设现在我们可以找到O(1)时间中最低的同级祖先,那么可以在真正执行ANN O(logn)吗?


四叉树是有效的空间索引。我对[2]中所述的压缩四叉树结构中最近邻居搜索的实现感到困惑。(不赘述,搜索将沿着所谓的等距正方形自上而下进行,以等距路径的尾节点结束。在所附的图像中,该搜索可能是东南部充满点的任何节点。)

为使算法有效,必须为每个节点(一个至少包含两个非空象限的正方形)维护一个指针,该指针指向四个方向(北,西,南)中每个最低(祖先最靠近)的祖先节点, 东)。这些由节点向西的祖先的绿色箭头指示(箭头指向祖先广场的中心)。

本文声称这些指针可以在点插入和删除期间在O(1)中更新。但是,当查看绿点的插入时,似乎我需要更新任意数量的指针,在这种情况下,其中六个。

我希望有一个技巧可以在恒定时间内更新此指针。也许存在一种可以利用的间接形式?

点插入之前(左侧)和之后(右侧)的四叉树

编辑:

本文的相关部分为6.3,其中的内容为:“如果路径具有弯曲,则除了的最低祖先,我们还应该考虑方向中的每个最低祖先的该伴随朝向该方向[...]查找从这些正方形可在完成每平方的时间,如果我们关联附加指针在每个正方形指向其最接近的祖先为每个方向在插入或删除点的过程中,也可以在时间内更新这些指针。”log(c/ε)2 d q q O 1 2 d Q 0 O 1 q2dqqO(1)2dQ0O(1)

[2]:Eppstein,D.和Goodrich,MT和Sun,JZ,“跳过四叉树:多维数据的简单动态数据结构”,在“计算几何学”第二十一届年度研讨会论文集中,第296-305页。 ,2005年。


2
已经有一段时间了,所以我记不清了,但是今天早上重新阅读了这篇论文(arxiv和日记版本)时,我找不到它表明我们保留了您所需要的指针的地方。我以为我们只保留父子指针和交叉样本指针。因此,也许您可​​以更精确地指出论文中所说的内容。
David Eppstein

2
大卫,您好,谢谢您的光临。ANN搜索是最后一部分(6)。该问题在图5中指示。7(b)大致是我在上图中绘制的,如果q在左下角的某处。我已经对问题进行了编辑,以包含第6.3节中文本的特定部分。我对如何我可以或许equistabbing的定义放宽一些想法,但我不知道我能证明任何替代计数不违反针对性的性能...
0__

2
好的,这确实看起来像个问题。我正在与Goodrich讨论(我们已经与Sun失去了联系,Sun在这里做了大部分细节)。我们目前的感觉是,我们实际上不需要这些额外的指针(我们不需要它们用于近似范围,为什么近似邻居应该有所不同,并且查询算法应该可以记住它在对象上看到的祖先向下而不是使用指针进行查找),但是当我们对此处的细节有更多把握时,我们会尽快与您联系。
David Eppstein

2
很好,非常感谢。出于字符计数和布局的原因,我将添加一个答案,勾勒出我的“直觉性想法”,也许这是一个起点。
0__

Answers:


11

像大卫一样,我不知道乔纳森为什么要对2 ^ d指针发表这样的评论。不需要它们。正如David前面提到的,基本属性是,当我们对Q_0中的叶v进行点定位时,记住跳跃四叉树中的同级节点(及其框)就足够了。当处理来自P的框时,我们为最接近查询点的叶框进行点定位,并在向下移动时插入同级框。听起来这与您的答案大致相同。此外,此程序与以下论文中的近似点定位非常相似:Arya,Sunil和Mount,David M.和Netanyahu,Nathan S.和Silverman,Ruth和Wu,Angela Y., JACM,1998年,“一种用于近似最近邻搜索固定维度的最佳算法”。


那是好消息!我只是不确定在下降步骤中添加兄弟姐妹是否会改变整体最坏情况成本的界限,但是我想没有。我期待已久的进纸通过的Arya等人,但我发现它要比你的四叉树纸不易进入的:)。
0__

5
哇!欢迎使用cstheory.SE!
张显之张显之

5

可以考虑将四叉树作为一种数据结构的跳过列表实现,该数据结构根据点的z顺序存储这些点。(可以说)至少在概念上更简单...

请参阅此处的第2章:http : //goo.gl/pLiEO

是的,假设您可以在恒定时间内执行一些基本的z阶运算,那么您绝对可以在对数时间内进行ANN。上一章还表明,如果要压缩四叉树,则无法避免进行奇异操作。注意,LCA操作不是必需的...


3
是的,对于相同的z顺序,确定性变量非常像2-3棵树。
David Eppstein

确实,感谢您的链接,我确实看过您的论文。无论如何,我无法凭经验验证给定算法的界限。我有种感觉,对引理7的引用(用于限制定理13中的回合数)可能是无效的,因为它假定半径为常数,而ANN中的搜索半径逐渐变化,因此,一组关键正方形。r
2013年

在搜索过程中,确定的半径会缩小。我很乐观地认为该论点是正确的。
Sariel Har-Peled

1

我还凭直觉感到没有这些指针就可以生存,而且由于我需要在某个时候将所有节点持久保存到硬盘上,因此指针的任何减少都是很好的。

我的想法大致如下:除了最佳候选点(叶),我们还跟踪每个回合中最差的距离。最坏的距离将是节点的所有角到查询点的距离的最大值,而不管是在正方形还是内部。 r m a x d i s t 'v q q v vlbestrmaxdist(v,q)qvv

一轮是这样的:如果为空,则返回,如果有的话。否则,delete-min会在给出当前的。将初始化为(如果尚未观察到最佳候选者,则将其设置为)。首先,测试的每个非空儿在。如果此子是叶,则如有必要,更新和。如果是节点,则计算和,后者是最佳距离:如果为零,则为零b Ë 小号 p 0 Q 0 - [R 一个Xb ë 小号p 0 Q 0 q b Ë 小号 ř 一个X q d 小号 'q v ð 小号q v v q q vPlbestp0Q0rmaxlbestp0Q0qlbestrmaxqdist(q,v)dist(q,v)v谎言里面,或各个角落的最短距离到。qqv

如果,请忘记,否则保留它。如果保留的节点数为,则将这些节点推到。回合结束。 q 2 Pdist(q,v)>rmaxq2P

否则,类似于原始搜索:在最大可能的找到,即的对应节点,然后从那里开始:同样,不要要求等距离的子项下降,而是按照前面的步骤测试所有子项,即跳过最佳距离超过。如果在此测试之后仍然有孩子,请下降到该位置并重复。如果没有孩子,请转到并重复。如果测试在中执行,则该回合结束。p 0 Q j r m a x Q j 1 Q 0qp0QjrmaxQj1Q0

目前,我既不知道在每种可能的情况下都不能保证找到最近的邻居,也不知道它的性能是否与原始算法一样好。同样,的初始化是否足够。的优先级应该是什么-仍然是最佳距离? PrmaxP


编辑(2013年4月)

现在,我进行了更多实验,以澄清上述算法,该算法使用“等当量”节点而不是等值节点的定义,基于以下特性:降到这样的节点不会更改当前查询范围形状所覆盖的区域。rmax

不幸的是,人们可能会构造出病理情况(见下图;查询点位于底部中心),在这种情况下,性能会下降到回合。O(n)

在此处输入图片说明


0

我现在已经实现了基于等值的算法,在其中搜索最低的兄弟祖先(尝试找到O(1)变量之前),以验证定理13中要求的最大回合数:。O(ϵ1d(logn+logϵ1))

我使用的是先前回答中的“病理”示例。二维均方根的边长为512,其中中心坐标为(256,256)。坐标以整数形式给出,导致。这些点在整个平方根上水平等距放置,查询点位于(256,511)(请注意512已经在平方根的外面)。vϵ=1v

在下图中,显示了完整的树,在此示例中,点数为16。蓝色正方形轮廓指示将被压入优先级队列的有趣正方形,而其中心的数字则表示整数。他们被推。发现的叶点也用其所占的整数标记。三个透明的蓝色圆圈表示在第1,第2和第7轮之后的已知NN半径(在第7轮中首先看到最近的邻居)。总共有12个回合(队列中最后6个仅是弹出方块,但不添加任何新方块)。Q0

我使用一系列越来越大的平方根和点数来运行此示例,其中点的间距保持不变(32)。这证实了从插图中已经直观可见的结果:该算法需要进行次回合,而和定理13 表示仅需要次回合。d=2ϵ=1OlognO(n)d=2ϵ=1O(logn)

因此,除非我缺少重要的内容,否则该算法将无法达到规定的速度。有任何意见或想法吗?

遍历

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.