一尘不染

给定一组点,我如何找到彼此最远的两个点?

algorithm

我可以计算每个点之间的距离并取最大距离,但这听起来不像是一个非常有效的方法(当点数量多(> 1000)时)。

注意:这是用于iPhone的,所以我没有很多处理能力。


阅读 430

收藏
2020-07-28

共1个答案

一尘不染

您要计算集合的 直径
。标准技术是首先计算凸包,这可以减少查找凸多边形直径的问题。即使在您没有消除任何要点的情况下,这些添加的信息也正是有效解决问题所需要的。但是,找到凸多边形的直径并不完全是简单的。几篇带有该算法的已发表论文被证明是不正确的。

这是针对该任务的正确O(n)算法的相当可读的讨论(其中n是凸包中的点数)。

另外,还要注意的并不是iPhone 有限的;
即使是完全幼稚的算法,精心编写的实现也可以在不到十分之一秒的时间内处理1000个点。当然,使用正确的算法会让您更快=)

2020-07-28