在2D空间中检测两个点的最快方法是什么?它们之间的距离最大?

时间:2011-08-27 09:09:01

标签: algorithm geometry

我需要得到两个距离最远的点。

最简单的方法是计算每个方法之间的距离,但该方案具有二次复杂度。

所以我正在寻找更快的解决方案。

2 个答案:

答案 0 :(得分:4)

怎么样:

1确定该组点的凸包 2找到船体上各点之间的最长距离。

这应该允许你在检查距离时忽略船体上没有的所有点。

答案 1 :(得分:2)

详细阐述rossom的答案:

  1. 使用Graham扫描或O(n log h)时间等算法找到可以在O(n log n)时间内找到的点的凸包,其他算法我认为更难以实现
  2. 从一个点开始,说A,然后循环通过其他点找到离它最远的点,比如B。
  3. 将A前进到下一个点并前进B,直到它再次离A最远。如果此距离大于第2部分中的距离,则将其存储为最大距离。重复,直到您循环遍历集合
  4. 中的所有A点

    第2部分和第3部分采用摊销的O(n)时间,因此整个算法需要O(n log n)或O(n log h)时间,具体取决于您在实施凸包时需要花费多少时间。< / p>

    这很好,除非你只有几千点(就像你说的那样),O(n ^ 2)应该可以正常工作(除非你多次执行)。