algorithm - 在平面上找到 3 个最近的点

标签 algorithm computational-geometry divide-and-conquer

我们知道找到 2 个最近点的快速算法是使用分而治之。 解决方案在这里 http://en.wikipedia.org/wiki/Closest_pair_of_points_problem

现在这里是这个问题的升级版。对于任意三个点 pi, pj , 和 pk, 这些点的三距离 td(p1, p2, p3) 是两个较小的点之和 dist(p1,p2)、dist(p2,p3) 和 dist(p1,p3) 之间的距离。

找出平面上所有可能的 3 点组合的最小三距离的有效方法是什么?

最佳答案

回顾一下最近对的分而治之算法:将 n 个点垂直平分为 n/2 和 n/2。在每一半中找到最接近的一对。令 d 为最近的半对之间的距离。将一个半径为 O(d) 的盒子沿平分线滑动,考虑两个点都位于盒子中的中间对。

用于 3 点组合问题的 O(n log n) 时间分而治之算法根本不会有太大不同。对论证的核心是盒子始终包含 O(1) 个点,因此迭代三元组是没有问题的;合并步骤仍然是线性时间。临时密度参数(“六点”)必须被替换,但我不愿意提供细节,因为这是家庭作业,因为它实际上只需要用于分析而不需要用于实现。

关于algorithm - 在平面上找到 3 个最近的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25879710/

相关文章:

c++ - 在二维数组中查找图形的边界

algorithm - 如何找到二维矩阵中的 Blob 数?

algorithm - 通过将多边形拖动为画笔来编辑矢量图像

algorithm - 计算或检测从线路经过的 Sprite

java - 如何消除3维java数组中的数组项

将体素/数据封装在框中的算法

c# - 如何找到我的 Gin 问题的解决方案?

c++ - 当我在平面上嵌入平面图时,如何找到包含预定义点的面

algorithm - 用于计算控制点的分而治之算法?

algorithm - O(n) 中的主要点集