获得具有最大平均距离的点子集

时间:2017-12-13 07:58:34

标签: algorithm distance pairwise

我有N个点。我知道他们所有的成对距离。我需要从它们中选择K个点,这样平均成对距离将是最大的。 我只有虚拟的想法来遍历每个点。

您是否更明智地了解如何获得此类子集?

在没有任何假设的情况下解决这个问题会很好,但是如果它会有帮助:N大概是10 ^ 3-10 ^ 4,K大约10 ^ 2

我的虚拟想法 我从点#1搜索最远的点开始,所以我有一个2点的大块,接下来我搜索第三个点,它与这两个点的平均距离最大,依此类推,直到我将收集K点。应对所有N点重复此过程作为起始值。最后,我将获得N个K点阵列。从中我可以选择平均距离最大的那个。

2 个答案:

答案 0 :(得分:1)

我不是100%肯定,但这听起来像NP-Hard问题。

作为近似值,您可以执行K-Median Clustering并返回生成的群集代表作为结果。聚类基本上尝试着 最小化属于同一群集的点的距离(对您来说并不重要),并最大化来自不同群集的点之间的距离(这就是您想要的)。

修改

我认为,想一想这一点,你会想要尝试在数据集的外部极限上搜索点,以便最大化平均成对距离。因此,您可以计算(凸)船体并从那里拾取点,也可以在选择点时重新计算船体。或者你可以从点(a)开始,从(a)中搜索最远点(b),然后从(b)中搜索最远点(c),依此类推(避免两次拾取点,也可以通过删除你挑选它们之后)。这将确保您在数据集的边界处拾取点。

答案 1 :(得分:1)

这可以看作是具有N个顶点的完整图上最重k-子图问题的一个特例,其中权重满足三角不等式。

问题的一般情况是非多项式很难,我猜测上面的限制不足以使它成为多项式,尽管它们当然可以承认一些启发式。

对于近似解决方案,您是否评估过贪婪解决方案或贪婪随机采样方式?