给定一组 2D 点和最大距离,找到中心点为集合点的最小簇

Given a set of points in 2D and a max distance, find minimum of clusters where the center is a point of the set

给定一组二维点(相当小)和最大距离,找到最小的簇数,其中对于每个簇,内部所有点之间的距离为最大距离的半径。集群的中心应该是那些点之一。此外,给出每个簇内的点数。

好像是k-means之类的东西,不过是给了最大距离。我没有看到比测试所有可能性更好的解决方案(最大簇数是点数)。有更好的解决方案吗?

正如 Anony-Mousse 所说,您的问题似乎是 "related" 到 set cover problem。使用与维基百科页面中相同的符号和术语,宇宙 U 是你的一组点,而集合 S 包含 |U| 个集合,每个点一个这样的集合 uU 中,包含以 u 为中心的圆盘内的所有点,半径等于您的最大距离。所以你的问题是找到S中的最小集合数(相当于找到应该是簇中心的点)使得这些集合的并集是U.

现在,我上面所做的是将您的问题简化为布景问题。这是我们想要执行归约的错误方向,以表明您的问题可能是 "difficult"。要做到这一点,需要证明布景问题的每个实例都可以改写为您的问题的一个实例。

但是,您说您的点数很少。您可以像上面那样定义集合 S,然后对其进行暴力破解(即尝试 S 的所有可能的子集合,并选择其中集合数最少的集合,从而导致指数复杂度|S| 的大小)。关于这种方法,你实际上希望在 S 中有相当少的集合,点数并不那么重要。

您的问题可以通过使用 leaderCluster 包在 R 中解决。它使用 Hartigan 的领导者算法。