我在 2D 网格上获得了 n
点。我被要求对这些点进行聚类,其中对于某个常数 <=k
距离为 k
的点被分组在一起。请注意,集群内的所有点对都必须遵守距离规则。
我考虑解决这个问题的方法是,对于每个点,找到它的邻居,其中邻居由距离 k
内的点定义。我们可以假设每个点和它们的初始邻居形成一个初始簇。
然后对于每个点,我们将其初始集群与其所有相邻集群进行比较。如果所有邻居集群都与当前点集群相同,则它们被加入。如果至少有 1 个邻居簇不相同,则所有涉及的点及其邻居必须不相交。
例如,假设我们有积分
[0, -0.5]
[0, 0]
[0, 0.5]
[0, 1.5]
和k = 1
对于点 [0, -0.5],我们有邻居 [0, 0]
和 [0, 0.5]
。
对于点 [0, 0],我们有邻居 [0, 0.5]
和 [0, -0.5]
。
对于点 [0, 0.5],我们有邻居 [0, 0]
、[0, -0.5]
、[0, 1.5]
。
对于点 [0, 1.5],我们有邻居 [0, 0]
, [0, 1.5]
。
所以在这种情况下,我们将有 4 个集群,由一个单独的点定义。
实现该算法的最有效方法是什么?