给定2D中的一组点(相当小)和最大距离,找到每个簇的最小簇数,其中所有点在最大距离处具有半径之间的距离。群集的中心应该是其中之一。此外,给出每个集群内的点数。
它似乎与k-means和这种东西类似,但给出了最大距离。我没有看到比测试所有可能性更好的解决方案(最大簇数是点数)。有更好的解决方案吗?
答案 0 :(得分:1)
正如Anony-Mousse所说,你的问题似乎与set cover problem“有关”。使用与维基百科页面中相同的表示法和术语,Universe U
是您的点集,而集合S
包含|U|
集,每个点{{1}一个这样的集合在u
中,包含磁盘内的所有点,其中心位于U
半径等于您的最大距离。所以你的问题是在u
中找到最小数量的集合(相当于找到应该是集群中心的点),这样这些集合的联合是S
。
现在,我上面所做的就是将你的问题减少到设置封面问题。这是我们想要执行减少的错误方向,以表明您的问题可能“困难”。要实现这一点,需要证明集合覆盖问题的每个实例都可以作为问题的一个实例进行重新定义。
但是,你说你的积分很少。您可以像上面那样定义集合U
,然后强制它(即尝试S
的所有可能的子集合,并使用其中包含最少数量的集合,从而导致指数复杂化S
)的大小。关于这种方法,你实际上想要在|S|
中拥有相当少数的集合,点数并不重要。
答案 1 :(得分:0)
使用leaderCluster包可以在R中解决您的问题。它使用Hartigan的领导算法。