【问题标题】:How to find certain sized clusters of points如何找到特定大小的点簇
【发布时间】:2013-11-26 09:07:28
【问题描述】:

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

在 N=2 的情况下,我们只是在寻找所有靠近在一起的点对,使用 kd 树很容易高效地完成(例如,递归地将空间分成八分圆或其他东西,其中每个区域都是树上的不同分支,然后对于每个点,将其与具有相同父级的其他点进行比较(如果靠近区域的边缘,请检查适当的级别数))。我认识到,通过 N=N' 的解决方案进行归纳,我可以通过取不同 N' 解决方案之间的交集来找到 N=N'+1 的解决方案,但这是非常低效的。

有人知道解决这个问题的好方法吗?

【问题讨论】:

  • 在一般情况下这是一个相当困难的问题。查看Cluster analysisk-means clustering
  • 对于N=2,如果两边各有一个点,中间有一堆对怎么办。它不应该将两个最外面的点配对,还是应该将中间的点分开,以便外部点有对,或者介于两者之间?
  • 它应该发现两个点的每个实例都足够接近,这允许一个点成为任意多个集群的一部分。所以,我不想只做 k-means 聚类或其他任何事情。

标签: algorithm language-agnostic geometry computational-geometry


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-10-14
    • 2022-01-12
    • 2014-10-29
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    相关资源
    最近更新 更多