4

我正在解决一个问题,即为一组任意放置的非相交椭圆找到最近的三个邻居。作为一个新用户,我不允许包含图像标签,但我在页面底部包含了 URL,因为我一直认为我能够更好地使用视觉辅助工具来解释自己。这张图片展示了我所说的将 3 个最近的椭圆彼此连接起来的阿波罗尼奥斯圆。

到目前为止,我已经尝试使用椭圆之间的最小距离并修改 Delaunay 三角剖分,通过增量和扫描线方法,使用各种技术涉及在每 3 个椭圆配置之间形成的三角形圈等,并尝试使用边界框估计邻居,以及完全没有关于如何真正有效地工作的想法

虽然我已经制定了一个解决方案,但它涉及详尽搜索并比较每个椭圆的三个椭圆与其他椭圆,并且时间复杂度为n(n-1)(n-2)/3!. 最重要的是,每个计算都是迭代而不是代数完成的。

有没有人知道如何以代数方式完成这个并且n^2时间复杂度更低?

即使是关于一种技术的建议也适合我尝试,因为现在我已经在这方面工作了将近 3 周,而且真的离一个体面的答案还差得远。

图片

4

2 回答 2

3

如果您为椭圆计算 Voronoi 图,那么您的圆中心点将放置在图的交点处。

http://ima.umn.edu/nuggets/voronoi.html

于 2012-02-27T16:33:37.987 回答
0

您可以根据它们的边界框将椭圆打包到R-tree中。R-tree 是一种类似于二叉树的空间对象数据结构,通过遍历支持高效的最近邻和第 k 个最近邻查询。

对于具有许多椭圆的大型数据集,使用 R-tree 应该会显着减少距离测试的数量,只扫描查询附近树的一个子集。

希望这可以帮助。

于 2012-02-27T19:34:54.513 回答