Algorithm 空间聚类算法
给定一个二维平面上的点集合,我想找到彼此在Algorithm 空间聚类算法,algorithm,cluster-analysis,Algorithm,Cluster Analysis,给定一个二维平面上的点集合,我想找到彼此在Y范围内的X点集合。例如: 8| 7| a b 6| 5| c 4| 3| e 2| d 1| ------------------------- 1 2 3 4 5 6 7 8 9 0 1 a、b、c和d是二维平面上的点。给定3个参数表示点数(X),3个参数表示距离(Y),算法将返回[[a,b,c]]。一些例子: algorith
Y
范围内的X
点集合。例如:
8|
7| a b
6|
5| c
4|
3| e
2| d
1|
-------------------------
1 2 3 4 5 6 7 8 9 0 1
a
、b
、c
和d
是二维平面上的点。给定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轴(上面的数字)都有10000个单位长
- 图上有800个点(a、b、c、d等)
- 我认为这无关紧要,但我正在使用JavaScript
我尝试过的事情:
- 实际上,我关心的是输出接近多个输入点的新点,所以我尝试在网格上迭代,并使用毕达哥拉斯“环顾”它,以找到给定距离之外的每个点。考虑到总面积,这太慢了。 您还可以在中看到数据大小
- ,这似乎有一个不同的目的-我知道我希望我的集群大小有多大
- 我试着相互比较点,建立紧密配对,然后紧密三胞胎,等等,直到最后,但这似乎也有点效率低下。我将继续尝试一些散列或字典来避免这些循环
n-1
相邻边的权重,并查看其中X
的权重是否小于或等于Y
。第一次构建它将是O(N^2)
,但是在那之后,所有的查询都将是O(N)
@mitchelpulin,谢谢。感觉这是我第二次尝试的方向,但我不确定。你能给我指一个教程或一些搜索词吗?我以前从来没有做过这样的事情。我想你应该先看看图形数据结构“算法(X=2,Y=3)返回[[a,b,c],[d,e]]”第一个集合有三个点,而不是2。这很有希望,谢谢。当我看到它使用我的约束执行时,我会将其标记为已接受。@sennett如果它不够快,您可以尝试以足够快的速度将图形转换为其k=X-1核心(迭代删除次数小于X-1的顶点;请参见)。谢谢