两组之间最接近的点对,以2D表示


11

我在二维平面上有两组点。我想找到最接近的双点小号,吨使得小号∈ 小号,吨∈ Ť,并且欧几里德距离之间小号,吨是尽可能小。如何有效地做到这一点?可以在O (n log n )时间内完成吗,其中n = | S | + | T | ?S,Ts,ts∈St∈Ts,tO(nlog⁡n)n=|S|+|T|

我知道,如果我给一组,那么就可以找到最接近的一对点小号,小号' ∈ 小号在Ø (ñ 日志ñ )使用的时间标准分而治之算法。但是,该算法似乎不能推广到两个集合的情况,因为S或T中两个最接近点之间的距离与这两个集合中两个最接近点之间的距离之间没有联系。Ss,s′∈SO(nlog⁡n)ST

我以为存储设置的在ķ -d树,然后为每个小号∈ 小号,使用最近邻查询找到的最近点牛逼到小号。但是,最坏情况下的运行时间可能与O (n 2)时间一样糟糕。结果表明,如果T的点是随机分布的,则每个查询的预期运行时间为O (log n ),因此我们将获得一个预期运行时间为O (n log n )的算法。Tks∈STsO(n2)TO(log⁡n)O(nlog⁡n) 如果可以保证点是随机分布的,但是我正在寻找一种适用于任何点集合(不一定是随机分布)的算法。

动机:一个有效的算法将对另一个问题有用。

Answers:


10

是的,这可能是时间。为T建立Voronoi图。然后,对于每个点小号∈ 小号,发现其中包含在维诺图的小区。该小区的中心是点吨∈ Ť最接近小号。O(nlog⁡n)Ts∈St∈Ts

您可以在时间内构建Voronoi图,并且每个查询(查找包含s的单元格)都可以在O (log n )时间内完成,因此总运行时间为O (n log n )时间。O(nlog⁡n)sO(log⁡n)O(nlog⁡n)


很好,比我想出的要简单得多:)。
— aelguindy

不错的方法!链接会有所帮助,特别是对于查询方面。我可以找到一个Wikipedia页面,该页面显示一般点定位问题可以在时间内解决,但是对于Voronoi细胞的特殊情况有更好的方法吗?我的搜索只给出了这个答案,它以O (n )的方式做到了。O(log⁡n)O(n)
— j_random_hacker 2016年

点位置问题的复杂性通常以顶点总数(此处为Voronoi图)的形式给出。此数字可能大于的点数,甚至n = |。S | + | T | 。我不确定顶点数是否受O(n )限制吗?Tn=|S|+|T|O(n)
— Albjenow

1
@Albjenow,我不知道这地址你的关心,但是请注意,在2个维度,相信在Voronoi图的顶点上的数字点是Ø (ñ )(我似乎记得它是≤ 6 ñ或这样的东西。nO(n)≤6n
— DW

对于math.stackexchange上的这个问题,这似乎是正确的。
— Albjenow

5

由于我得出了一个令人满意的答案,因此我将评论扩展为答案。 这仅解决了距离的问题。这个答案基本上是错误的。L1

dO(nlogd−1⁡n)

O(nlog⁡n)O(nlog2⁡n)

S,TS−δzTδzzδzδz


P2pmPPqmQQ

1
l

链接已损坏:(
— Keerthana Gopalakrishnan
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.