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

Algorithm 如何在具有最大平均子集大小的等距子集上拆分集合?,algorithm,machine-learning,cluster-analysis,computer-science,graph-theory,Algorithm,Machine Learning,Cluster Analysis,Computer Science,Graph Theory,我有一组N个对象,它们之间有N*N个距离。我想在子集上对该集合进行聚类,这样在每个簇中,所有对象都具有相同的距离,并且所有簇上的平均值(簇大小)都最大化 我试着用这样的算法来解决这个问题: 让我们枚举对象之间的所有唯一距离 对于每个唯一的距离X,可以使用对象作为节点和邻接矩阵构建基于对象的图形,如果对象A和B之间的距离正好是X,则A和B之间的边存在 让我们在这个图中找到最大团。若此群组的大小大于当前最大值-则更新最大值并存储群组作为结果 从对象集中删除结果中存储的对象 重复此操作,直到对象集不为

我有一组N个对象,它们之间有N*N个距离。我想在子集上对该集合进行聚类,这样在每个簇中,所有对象都具有相同的距离,并且所有簇上的平均值(簇大小)都最大化

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

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

  • 对于每个唯一的距离X,可以使用对象作为节点和邻接矩阵构建基于对象的图形,如果对象A和B之间的距离正好是X,则A和B之间的边存在

  • 让我们在这个图中找到最大团。若此群组的大小大于当前最大值-则更新最大值并存储群组作为结果

  • 从对象集中删除结果中存储的对象

  • 重复此操作,直到对象集不为空

  • 有没有更有效的[近似]解决方案

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

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

    除此之外,我认为你的算法相当合理。由于这个问题可能是NP难问题,所以您确实希望使用贪婪近似

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

  • 为每个唯一距离构建子图

  • 按大小按降序排列子图

  • 除非您有来自上一次迭代的缓存值,否则请在每个子图中查找最大的团。记住最大的集团。如果当前最大子图大于其余子图,则停止

  • 输出找到的最佳子图

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