【发布时间】:2011-02-13 17:51:27
【问题描述】:
这是我前段时间在面试时被问到的一个问题。而且我仍然想不出合理的答案。
问题是:
给定一组点 (x,y)。找到 2 个最远的点。相距甚远。
例如,对于点:(0,0)、(1,1)、(-8, 5) - 最远的是:(1,1) 和 (-8,5),因为它们之间的距离大于 (0,0)-(1,1) 和 (0,0)-(-8,5)。
显而易见的方法是计算所有点之间的所有距离,并找到最大值。问题是它是 O(n^2),这使得它对于大型数据集来说过于昂贵。
有一种方法是首先跟踪边界上的点,然后计算它们的距离,前提是边界上的点比“内部”少,但它仍然很昂贵,并且在最坏的情况下会失败场景。
试图搜索网络,但没有找到任何明智的答案 - 尽管这可能只是我缺乏搜索技能。
【问题讨论】:
-
“不久前”是一个小时的量级吗? ;-)
-
如果你能做到O(nlogn)的排序,试试用吧。
-
你是什么意思,加布里埃尔?按什么排序?
-
你不能“排序”一个多维空间,或者更准确地说,你可以用许多不同的方式对其进行排序
-
@Marcelo - 没有。接近 3 年。
标签: algorithm language-agnostic geometry