给定半径的最大封闭圆


19

我尝试找到解决以下问题的方法:

给定点和半径的集合,找到圆的中心点,以使圆包含该集中的最大点数。运行时间应为。ř ø (Ñ 2)SrO(n2)

起初,这似乎类似于最小的封闭圆问题,可以轻松地在。这个想法是要设定一个任意的中心并环绕所有点。接下来,逐步替换圆以触摸最左/最右的点,然后将圆缩小到给定的半径,这显然是行不通的。SO(n2)S

Answers:


7

我不知道如何在时间内解决此问题,但是确实存在算法。O (n 2 log n )O(n2)O(n2log⁡n)

令为中心为的圆,第个点,半径为。不难发现点集可以被半径为的圆包围,只要交集为不为空。此外,如果不为空,必须有一些点躺在一些(的边界)。因此,对于每个和其键合上的每个点,我们尝试找出包含多少个圆s i i r P = { p 0,p 1,… ,p m } r I (P )C (p 0),C (p 1),… ,C (p m)I (P )I (P )bd C (p i)C(si)siirP={p0,p1,…,pm}rI(P)C(p0),C(p1),…,C(pm)I(P)I(P)bdC(pi)C (s i)p pC(pi)C(si)pp。所有的最大计数将解决此问题。p

让我们检查。\ textbf {bd} C(s_i)上的点与[0,2 \ pi)中的实数之间存在一对一的映射。对于每个圆C(s_j),C(s_j)和\ textbf {bd} C(s_i)之间的交集可以用间隔[begin_j,end_j]表示。因此,对于除C(s_i)以外的所有圆,最多存在n-1个间隔(某些圆可能与C(s_i)不相交)。通过对间隔的所有2(n-1)个端点进行排序,按顺序扫描并计算当前的重叠数,可以轻松找到最大计数。对于每个BD Ç (š 我)[ 0 ,2 π )ç (小号Ĵ)Ç (小号Ĵ)BD Ç (š 我)[ b ë 克我Ñ Ĵ,ê Ñ d Ĵ ] Ç (小号i)n − 1 C (s i)2bdC(si)bdC(si)[0,2π)C(sj)C(sj)bdC(si)[beginj,endj]C(si)n−1C(si)C (s i)2(n−1)C(si),此步骤可以在O(nlog⁡n)时间内完成,并且有n这样的圆圈,因此该算法的时间复杂度为O(n2log⁡n)。


2
可以使用标准的随机增量算法在时间(高概率)中构造圆的排列。实际上,运行时间为,其中是相交的圆对数。请参阅您最喜欢的计算几何学教科书。O (n log n + k )kO(n2)O(nlog⁡n+k)k
— JeffE 2012年

2

我认为困难的问题是要知道您选择的圆圈在集合中是否实际上是“最大”的。我认为可以确定的唯一方法是尝试所有可能的点组合,并测试围绕它们的圆的大小。

您可以通过先将点空间划分为宽度为2r的正方形单元格的网格来减少搜索空间。然后找到密度最大的单元。由于您已经找到了一个X点的圆,因此可以得出结论,如果一个圆存在更多的点,那么它中至少必须包含X个点。并以此为起点来测试这些点的不同组合。

如果您只寻找一组可能最大的点,则可以通过选择那些落在邻域密度内的邻域内的点来进一步减少需要测试的组合数大于X。

话虽如此,两个“减少”都可能失败,在最坏的情况下,您将为所有可能的点组合计算圆。


1

在B. Lee,DT的论文Computing 36,1-16(1986),第15页中的定理3指出最大封闭圆查找算法花费 时间成本。O(n2)

我认为关键仍然是早期提到的相交图构造算法(或参见Edelsbrunner,H.(1987),《组合几何算法》第7章)。之后,最大包围圈的查找应该很简单。O(n2)

显然,此问题等效于找到给定圆的最大数目所覆盖的点,并且很容易知道仅需要将给定n个圆相交的大部分个点视为候选。(这也直接导致了算法) ø (Ñ 2升ø 克(Ñ ))2n2O(n2log(n))

O(n2)O(n2)

V+E−F=2O(n2)


如果将其作为对已接受答案的补充,并且应单独阅读(我不知道,因为我不了解此主题,则不予理解),则应该对此进行明确说明。
— 2015年
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.