【问题标题】:Calculate farthest point of every point计算每个点的最远点
【发布时间】:2016-04-24 04:54:25
【问题描述】:

假设我们在平面上有两组点,比如 A 和 B(大小均为O(n))。我们能在O(n)时间找到最远的点对吗?

【问题讨论】:

  • 您想找到 A 和 B 中最远的一对点吗?我建议你改写你的问题并添加你到目前为止所做的事情。
  • @Rishit,谢谢。我改了。
  • 我不认为你可以在 O(n) 时间内完成。但这在 O(nlogn) 时间内是可能的。
  • 是的..我们可以在 O(nlogn) 时间内找到点集 A 的凸包或最远点 Voronoi 图。我想知道是否有更好的性能。跨度>
  • 通过信息论论证:简单地生成所有最远邻居的索引每个点需要 n 位,总共 n Log n 位。

标签: algorithm computational-geometry


【解决方案1】:

不,您无法计算O(n) 中每个点的最远点。您可以获得的最佳结果是O(n log n)2-d tree。您可以使用类似于查找最近点的技术来做到这一点。

阅读更详细的answer here,其中我展示了解决类似问题的其他几种方法。

【讨论】:

  • 即使您似乎回答的是最近对问题,而不是最远对问题...?跨度>
  • @j_random_hacker 本质上是一样的,因为你可以反转比较器
  • @willywonka_dailyblah:也许这适用于二维树解决方案,我不知道,但它绝对不适用于例如链接答案中的“网格”解决方案。一般来说,如果您知道 a 接近 b,并且 c 接近 a,那么您就知道 c 至少在某种程度上接近 b——但是如果您将“接近”替换为“远离”,则推理失败。
  • @j_random_hacker 这两个问题的想法是相同的。问题并没有问如何解决这个问题,而是问是否有可能在 O(n) 中解决。所以我的答案是no,这里是对相关问题的一些解释。您可以修改网格解决方案 - 现在您需要在开始时找到最远的网格,并在最远的网格中检查点。
  • 由于您在答案本身中没有提到它仅解决了一个相关问题,因此我将选择-1。如果您在那里提到最近点只是一个相关问题,并且它的一些解决方案可以适应最远点问题,那么将撤消。您也没有给出任何理由为什么没有比 O(n log n) 更好的解决方案(对于任何一个问题)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 2013-09-02
  • 1970-01-01
  • 2017-11-21
  • 2014-10-16
相关资源
最近更新 更多