寻找欧氏空间中“最紧密”的子集

时间:2012-07-19 10:47:16

标签: cluster-analysis graph-theory mathematical-optimization euclidean-distance

我在R ^ d的点x_1,x_2,... x_n \给出。我希望找到k个点的子集,使得这些k点之间的距离之和最小。天真这是一个O(n选择k)问题,但我正在寻找一种更快的算法。

我可以想到两种可供选择的等效配方:

  1. 最小边缘权重集团问题:将点视为图形,边缘权重是距离,并找到最小权重集团。 This is equivalent to maximal edge weight problem,已知是NP完全的。但是,我知道我的图形嵌入在R ^ d中,并且所有权重都是正数,所以也许这可能有帮助吗?

  2. 最小的无约束子矩阵问题:我给出了对称距离矩阵,我希望找到一个kXk次要的最小和。

  3. 我很感激你的帮助。

1 个答案:

答案 0 :(得分:1)

最明显的优化并不需要任何不同的公式。

首先贪婪地找到一个近乎理想的候选人。尝试通过交换成员来在线性时间内完善它。然后进行详尽的搜索,但每当新候选人比贪婪候选人更糟糕的时候停止搜索搜索空间。

E.g。

  1. 计算平均值
  2. 按平均距
  3. 的平方距离排序对象
  4. 按此顺序测试长度为k的所有n-k个间隔,选择最佳
  5. 对于任何未选择的对象,如果它改善了分数,请尝试将其与所选对象之一交换
  6. 现在你应该有一个相当不错的修剪候选人。

    然后进行详尽的搜索,并在比这个候选人更糟糕时停止。

    注意:步骤1-3是从快速凸包算法中获得的灵感。