我有N
个点。我知道他们所有的成对距离。我需要从它们中选择K
个点,这样平均成对距离将是最大的。
我只有虚拟的想法来遍历每个点。
您是否更明智地了解如何获得此类子集?
在没有任何假设的情况下解决这个问题会很好,但是如果它会有帮助:N
大概是10 ^ 3-10 ^ 4,K
大约10 ^ 2 的
我的虚拟想法 我从点#1搜索最远的点开始,所以我有一个2点的大块,接下来我搜索第三个点,它与这两个点的平均距离最大,依此类推,直到我将收集K点。应对所有N点重复此过程作为起始值。最后,我将获得N个K点阵列。从中我可以选择平均距离最大的那个。
答案 0 :(得分:1)
我不是100%肯定,但这听起来像NP-Hard问题。
作为近似值,您可以执行K-Median Clustering并返回生成的群集代表作为结果。聚类基本上尝试着 最小化属于同一群集的点的距离(对您来说并不重要),并最大化来自不同群集的点之间的距离(这就是您想要的)。
修改强>
我认为,想一想这一点,你会想要尝试在数据集的外部极限上搜索点,以便最大化平均成对距离。因此,您可以计算(凸)船体并从那里拾取点,也可以在选择点时重新计算船体。或者你可以从点(a)开始,从(a)中搜索最远点(b),然后从(b)中搜索最远点(c),依此类推(避免两次拾取点,也可以通过删除你挑选它们之后)。这将确保您在数据集的边界处拾取点。
答案 1 :(得分:1)
这可以看作是具有N个顶点的完整图上最重k-子图问题的一个特例,其中权重满足三角不等式。
问题的一般情况是非多项式很难,我猜测上面的限制不足以使它成为多项式,尽管它们当然可以承认一些启发式。
对于近似解决方案,您是否评估过贪婪解决方案或贪婪随机采样方式?