【发布时间】:2013-11-26 09:07:28
【问题描述】:
给定一个点列表,我想找到 N 个点的所有“集群”。我对集群的定义是松散的,可以调整为任何允许最简单的解决方案:它可以是某个大小圆圈内的 N 个点,也可以是彼此相距一定距离内的 N 个点,或者其他有意义的点。启发式是可以接受的。
在 N=2 的情况下,我们只是在寻找所有靠近在一起的点对,使用 kd 树很容易高效地完成(例如,递归地将空间分成八分圆或其他东西,其中每个区域都是树上的不同分支,然后对于每个点,将其与具有相同父级的其他点进行比较(如果靠近区域的边缘,请检查适当的级别数))。我认识到,通过 N=N' 的解决方案进行归纳,我可以通过取不同 N' 解决方案之间的交集来找到 N=N'+1 的解决方案,但这是非常低效的。
有人知道解决这个问题的好方法吗?
【问题讨论】:
-
在一般情况下这是一个相当困难的问题。查看Cluster analysis 和k-means clustering
-
对于N=2,如果两边各有一个点,中间有一堆对怎么办。它不应该将两个最外面的点配对,还是应该将中间的点分开,以便外部点有对,或者介于两者之间?
-
它应该发现两个点的每个实例都足够接近,这允许一个点成为任意多个集群的一部分。所以,我不想只做 k-means 聚类或其他任何事情。
标签: algorithm language-agnostic geometry computational-geometry