在飞机上找到3个最近点

时间:2014-09-16 23:00:39

标签: 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点组合的最小三个距离的有效方法是什么?

2 个答案:

答案 0 :(得分:3)

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

对于3点组合问题,O(n log n)时间的分而治之算法根本不会有很大不同。对的参数的核心是该框始终包含O(1)个点,因此迭代三元组没有问题;合并步骤仍然是线性时间。必须更换临时密度参数(“六点”),但我不愿详细说明这是家庭作业的可能性,因为它实际上只需要分析而不是实施。

答案 1 :(得分:0)

我的实施是here - Closest Triplet;我认为这值得一看。

从最近对转换是否有任何挑战,我不记得了。看起来不像。