我有一组N个物体,它们之间有N * N个距离。我想在子集上聚集这个集合,这样在每个集群中,所有对象都具有相同的距离,并且所有集群上的均值(cluster_size)都被最大化。
我试图用这样的算法解决这个问题:
让我们枚举对象之间的所有唯一距离。
对于每个唯一距离,X允许基于对象构建图形作为节点和邻接矩阵,其中如果对象A和B之间的距离正好为X,则存在A和B之间的边缘
让我们在此图表中找到最大集团。如果此团的大小大于当前最大值 - 更新最大值并将clique存储为Result
从一组对象中删除存储在Result中的对象
重复直到对象集不为空
是否有更有效的[近似]解决方案?
答案 0 :(得分:1)
平均值(簇大小)=总点数/簇数
最大化这一点的唯一方法是最小化群集数量。这似乎是一个相当糟糕的选择作为优化目标。您可能想重新考虑这一目标。
除此之外,我认为你的算法是相当明智的。由于问题很可能是NP难,所以你确实想要使用贪婪的近似值。
我建议在重新计算时更加懒惰,并添加一些界限。
为每个唯一距离构建子图。
按大小排序子图,降序。
除非您具有上一次迭代的缓存值,否则请在每个子图中找到最大的clique。记住整体最大的集团。如果当前最大值大于其余子图,则停止。
输出最佳子图。
从所有图表中删除包含的节点,并忘记那些包含刚找到的任何节点的最佳派系。回到2。