寻找最大程度地躺在球上的球的复杂性


10

给定一组点和半径。在距离小于的地方找到数量更多的点的复杂性。例如最大化?x1,,xnR2rri=1n1xxir

蛮力算法将遍历每个点并计算距离小于r的点的数量r。这将导致\ mathcal {O}(n ^ 2)的复杂性O(n2)

有没有更好的方法?


您是否看过四叉树和二进制空间分区树?我希望他们会提供一种在实践中更有效的算法,尽管我不知道最坏情况下的渐近运行时间可能是多少。
DW

ball标题的中心是否必须来自集合?)一个想法可能是,估计半径与到最近邻居的平均距离相比是否较小,或与直径的数量级相比(并考虑针对这些极端的方法) (小r的平面扫描r)和之间的宽间隔)。
灰胡子,2015年

球的中心应该是xi但是如果有一个更好的算法在没有这种情况的情况下,我也会感兴趣。
曼努埃尔·

对于未知的球程计数问题,它看起来似乎比算法要快。但是,如果您可以接受一个不精确的答案,则可以通过一组方向不同的正方形近似一个磁盘。对于每个方向,您都必须构建一个范围树(en.wikipedia.org/wiki/Range_tree),该树将允许您以时间(k计算一个正方形内的所有点。-一些结果点)。O(n)O(log2(n)+k)
HEKTO

@HEKTO您是否建议构建一个成本为以查询点是否位于一个成本为的矩形中?然后遍历所有点以计算近似球中还有多少其他点?这可能有效,但是这种数据结构所需的内存是多少?会低于吗?O(nlog(n))O(log2(n)+k)O(n2))
曼努埃尔·2015年

Answers:


5

似乎目前尚不知道用于球程计数问题的亚线性算法。

但是,如果您可以接受一个不精确的答案,则可以通过一组方向不同的正方形近似一个磁盘。对于每个方向,您都必须构建一个范围树,该将允许您在时间(k-所得到的点数)中计算一个正方形内的所有点。O(log2(n)+k)

每个范围树都将需要内存,您越希望获得更好的近似值,就应该使用更多的方向。例如,两个方向将为您提供一个八边形,它近似于面积误差小于6%的磁盘。O(nlog(n))


3

答案不是那么简单,在复杂性理论中对该问题有深入的研究。例如,它似乎是作为以下问题进行研究的,它集中在快速的“球形范围计数”查询上。是的,可能会有改进的理论界限,但是这些似乎是任何人都没有实现的抽象算法。如果您想要实际的实现,那就是另一个问题。

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.