如何在具有最大平均子集大小的等距子集上拆分集合?

时间:2017-12-22 20:45:29

标签: algorithm machine-learning cluster-analysis computer-science graph-theory

我有一组N个物体,它们之间有N * N个距离。我想在子集上聚集这个集合,这样在每个集群中,所有对象都具有相同的距离,并且所有集群上的均值(cluster_size)都被最大化。

我试图用这样的算法解决这个问题:

  1. 让我们枚举对象之间的所有唯一距离。

  2. 对于每个唯一距离,X允许基于对象构建图形作为节点和邻接矩阵,其中如果对象A和B之间的距离正好为X,则存在A和B之间的边缘

  3. 让我们在此图表中找到最大集团。如果此团的大小大于当前最大值 - 更新最大值并将clique存储为Result

  4. 从一组对象中删除存储在Result中的对象

  5. 重复直到对象集不为空

  6. 是否有更有效的[近似]解决方案?

1 个答案:

答案 0 :(得分:1)

平均值(簇大小)=总点数/簇数

最大化这一点的唯一方法是最小化群集数量。这似乎是一个相当糟糕的选择作为优化目标。您可能想重新考虑这一目标。

除此之外,我认为你的算法是相当明智的。由于问题很可能是NP难,所以你确实想要使用贪婪的近似值。

我建议在重新计算时更加懒惰,并添加一些界限。

  1. 为每个唯一距离构建子图。

  2. 按大小排序子图,降序。

  3. 除非您具有上一次迭代的缓存值,否则请在每个子图中找到最大的clique。记住整体最大的集团。如果当前最大值大于其余子图,则停止。

  4. 输出最佳子图。

  5. 从所有图表中删除包含的节点,并忘记那些包含刚找到的任何节点的最佳派系。回到2。