计算数组中矢量之间的最大距离

时间:2012-08-24 11:04:32

标签: algorithm complexity-theory

假设我们有一个包含n个向量的数组。我们想要计算这些向量之间的最大欧氏距离。 最简单(天真?)的方法是迭代数组,并为每个向量计算其与所有后续向量的距离,然后找到最大值。 然而,这个算法会增长(n-1)!关于阵列的大小。

还有其他更有效的方法解决这个问题吗?

感谢。

4 个答案:

答案 0 :(得分:3)

你对朴素算法的复杂性的计算是不可靠的,它应该是O(n(n-1)/2),它会减少到O(n^2)。计算两个向量之间的距离是O(k),其中k是向量中元素的数量;这仍然会使复杂性远低于O(n!)

答案 1 :(得分:1)

对于强力算法,复杂度为O(N ^ 2 * K)(K是向量中的elem的数量)。但是我们可以通过在欧几里德空间中了解A,B和C点来做得更好:

|AB| + |AC| >= |BC|

算法应该是这样的:

如果到目前为止找到的最大距离为MAX,而|AB|的最大距离为C,则已计算距离|AC||CB| MAX > |AC|+|CB|,然后我们可以跳过|AB|的计算。

很难说这个算法的复杂性,但我的直觉告诉我离O(N*log(N)*K)

不远

答案 2 :(得分:0)

此问题之前已在此处,请参阅How to find two most distant points?

答案是:可以在欧几里德空间中小于O(n ^ 2)。另请参阅http://mukeshiiitm.wordpress.com/2008/05/27/find-the-farthest-pair-of-points/

答案 3 :(得分:0)

假设你有一对A点和B点。考虑分别在北极和南极有A和B的超球面。包含在超球面中的任何一点C能否远离A而不是B?

进一步假设我们将pointset分区为sqrt(N)超级盒,每个盒子都有sqrt(N)个点。对于任何一对超级箱,我们可以在k时间内计算其中包含的无限点集的任意两点之间可能的最大距离 - 通过简单地计算它们最远角之间的距离。如果我们已经有一个比这更好的候选者,我们可以丢弃那些超级盒子中的所有点。