如何找到一定大小的点集群

时间:2013-11-13 16:34:41

标签: algorithm language-agnostic geometry computational-geometry

给出一个点列表,我想找到N个点的所有“簇”。我对群集的定义是松散的,可以调整为允许最简单的解决方案:它可以是特定大小的圆圈内的N个点,或者是彼此距离内的N个点或其他有意义的东西。启发式是可以接受的。

在N = 2的情况下,我们只是寻找靠近的所有点对,使用kd树很有效率(例如递归地将空间分成八角形或其他东西,每个区域都是一个树上的不同分支,然后对于每个点,将它与具有相同父级的其他点进行比较(如果靠近区域的边缘,也检查适当数量的级别))。我通过N = N'的解来感知,我可以通过采用不同N'解之间的交点来找到N = N'+ 1的解,但这是非常低效的。

任何人都知道一个体面的方式来解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

首先计算Euclidean minimum spanning tree,例如CGAL可以执行此操作。从那里精确的算法取决于您的具体要求,但它大致如下:您按照长度对该图中的边进行排序。然后删除边缘,从最长的边缘开始。它是一个单独连接的图形,因此对于每个删除的边缘,您将图形分成两个子图形。根据您的条件检查每个创建的子图是否形成集群。如果没有,请继续删除边缘。