空间聚类算法

时间:2019-03-07 15:48:56

标签: algorithm cluster-analysis

给定2D平面上的点集合,我想找到彼此X之内的Y个点的集合。例如:

8|
7|    a     b
6|
5|       c
4|
3|                    e
2|                  d          
1|
-------------------------
  1 2 3 4 5 6 7 8 9 0 1

abcd是2D平面上的点。给定参数3作为点数(X),参数3作为距离(Y),算法将返回[[a, b, c]]。一些例子:

algorithm(X = 3, Y = 3) returns [[a, b, c]]
algorithm(X = 2, Y = 3) returns [[a, b, c], [d, e]] -- [a, b, c] contains at least two points
algorithm(X = 4, Y = 3) returns [] -- no group of 4 points close enough
algorithm(X = 5, Y = 15) returns [[a, b, c, d, e]]

约束:

  • x和y轴(上面的数字)长10,000个单位
  • 图中有800个点(a,b,c,d等)
  • 我认为这无关紧要,但是我正在使用JavaScript

我尝试过的事情:

  • 我实际上关心的是输出接近多个输入点的新点,因此我尝试在网格上进行迭代,并使用毕达哥拉斯“环顾四周”以找到给定距离的每个点。考虑到总面积,这太慢了。 See the source here。 您还可以在real data test中查看数据大小。
  • DBSCAN,这似乎有不同的用途-我知道我希望集群大小达到多大。
  • 我正在currently尝试比较各个点,并建立紧密的对,然后闭合三胞胎等,直到最后,但这似乎在效率低下也有所下降。我将继续尝试一些哈希或字典以避免这些循环。

1 个答案:

答案 0 :(得分:1)

只有800点,您可能可以通过比较每对来构建图形,然后运行Bron--Kerbosch来找到最大的集团。这是该算法的合法脚本实现:https://github.com/SeregPie/almete.BronKerbosch