Algorithm 如何找到两个最远的点?
这是我不久前在一次工作面试中被问到的一个问题。我仍然无法找到合理的答案 问题是: 给你一组点(x,y)。找到两个最远的点。彼此疏远 例如,对于点:(0,0),(1,1),(-8,5),最远的是:(1,1)和(-8,5),因为它们之间的距离比(0,0)-(1,1)和(0,0)-(8,5)都大 显而易见的方法是计算所有点之间的所有距离,并找到最大值。问题是它是O(n^2),这使得它对于大型数据集来说非常昂贵 有一种方法是首先跟踪边界上的点,然后计算它们的距离,前提是边界上的点比“内部”的点少,但这仍然很昂贵,在最坏的情况下会失败Algorithm 如何找到两个最远的点?,algorithm,language-agnostic,geometry,Algorithm,Language Agnostic,Geometry,这是我不久前在一次工作面试中被问到的一个问题。我仍然无法找到合理的答案 问题是: 给你一组点(x,y)。找到两个最远的点。彼此疏远 例如,对于点:(0,0),(1,1),(-8,5),最远的是:(1,1)和(-8,5),因为它们之间的距离比(0,0)-(1,1)和(0,0)-(8,5)都大 显而易见的方法是计算所有点之间的所有距离,并找到最大值。问题是它是O(n^2),这使得它对于大型数据集来说非常昂贵 有一种方法是首先跟踪边界上的点,然后计算它们的距离,前提是边界上的点比“内部”的点少,但这仍
试图搜索网页,但没有找到任何合理的答案——尽管这可能只是因为我缺乏搜索技能。边界点算法比比皆是(寻找凸包算法)。从那里,应该需要O(N)时间才能找到最远的相对点 根据作者的评论:首先在船体上找到任何一对相对的点,然后以半锁步的方式绕着它走。根据边缘之间的角度,你将不得不前进一个或另一个助行器,但总是需要O(N)来环绕船体。请考虑以下几点: 您可以只查看定义点集凸包的点,以减少数量,。。。但它看起来仍然有点“不理想” 否则,可能会有一种递归四叉树/oct树方法来快速绑定点集之间的一些距离,并消除大部分数据 编辑:一种方法是找到凸面 船体 点的集合,然后是两个 远处的点是该点的顶点 可能回答如下: 此外:
- 选择一个随机点
- 找到离它最远的点
- 重复几次
- 删除所有访问点
- 选择另一个随机点并重复几次
你在O(n)中,只要你预先决定“几次”,但不能保证找到最远的一对。但取决于你的分数集,结果应该相当不错 这个问题在算法简介中介绍。它提到1)计算凸壳O(NlgN)。2) 如果凸壳上有M个向量。然后我们需要O(M)来找到最远的一对 我发现这些链接很有用。包括算法细节分析和程序设计。
希望这会有帮助。您正在寻找一种算法来计算一组点的直径,即直径。可以证明,这与S的凸包直径相同,直径(S)=直径(CH(S))。首先计算集合的凸包 现在你必须找到凸壳上的所有对足点,然后选择距离最大的对。凸多边形上有O(n)个反足点。这就给出了一个求最远点的O(nlgn)算法 这种技术称为旋转卡钳。这就是马塞洛·坎托斯在回答中所描述的
如果你仔细编写算法,你可以不用计算角度。有关详细信息,请勾选此项。如果点以笛卡尔坐标表示,这似乎很容易。很容易,我很确定我忽略了什么。请随时指出我遗漏了什么
xa=(x1+x2+…+xn)/n
ya=(y1+y2+…+yn)/n 2) 。计算从点(xa,ya)到(x1,y1),(x2,y2),…(xn,yn)的所有距离
第一个“最远点”(xb,yb)是距离最大的点 3) 。计算从点(xb,yb)到(x1,y1),(x2,y2),…(xn,yn)的所有距离
另一个“最远点”(xc,yc)是距离最大的点 所以你得到了O(n)中最远的点(xb,yb)(xc,yc) 例如,对于点:(0,0),(1,1),(-8,5)
1). 参考点(xa,ya)=(-2.333,2)
2). 计算距离:
从(-2.333,2)到(0,0):3.073
从(-2.333,2)到(1,1):3.480
从(-2.333,2)到(-8,5):6.411
所以第一个最远的点是(-8,5)
3). 计算距离:
从(-8,5)到(0,0):9.434
从(-8,5)到(1,1):9.849
从(-8,5)到(-8,5):0
因此,另一个最远的点是(1,1)
找到所有点的平均值,测量所有点与平均值之间的差值,取距离平均值最大的点,然后找到距离平均值最远的点。这些点将是凸包的绝对角点和两个最远的点。 我最近为一个项目做了这项工作,该项目需要限制在随机定向无限平面上的凸面外壳。效果很好
请参阅注释:此解决方案不能保证提供正确答案。是“一段时间以前”的,大约一小时?;-)如果你能用O(nlogn)进行排序,试着用它。你是什么意思,加布里埃尔?按什么排序?您不能“排序”多维空间,或者更准确地说,您可以按多种不同的方式对其进行排序ways@Marcelo-不。接近3年。现在假设所有给定的N点都在co上