Javascript 每个簇拾取m个点
我有100万双这样的表:Javascript 每个簇拾取m个点,javascript,algorithm,data-structures,time-complexity,bigdata,Javascript,Algorithm,Data Structures,Time Complexity,Bigdata,我有100万双这样的表: (point_index, cluster_index) 目标是为每个集群选择(第一个?没关系)m点。集群的数量最多为16k。如何有效地做到这一点 m应较小,具有以下假设的解决方案: 没有特定的数据结构,只有一个带簇的点列表 集群大小是平衡的 m.n clustercount=Array(大小=c,用=0填充) i=randint(0,p) 完成=0 while(完整
(point_index, cluster_index)
目标是为每个集群选择(第一个?没关系)m
点。集群的数量最多为16k。如何有效地做到这一点
m
应较小,具有以下假设的解决方案:
- 没有特定的数据结构,只有一个带簇的点列表
- 集群大小是平衡的
- m.n
clustercount=Array(大小=c,用=0填充) i=randint(0,p) 完成=0 while(完整
平均而言,这种方法需要
迭代。实际的JS数据结构是什么?您已经为您的对使用了括号,但每对都是数组,然后您就有了一个对数组数组数组,或者…?将其存储在c*log(c)+m*c*log(log(c))+O(c)
中可能更有益:只需迭代集合并填充它。@nnnnnn我还没有决定!数据还在烘焙中..我使用了一个样本,因此没有真正想到这一点,但我应该!老实说,虫族,我还没有玩过虫族和数据结构。我将对此进行研究,但如果您有时间用一个示例提供答案,那将是受欢迎的!:)@gsamaras只是一个对象,key=cluster index,values=array of points。@user1470500“如果没有一种方法可以在不重复和不需要检查的情况下执行伪随机序列?”---有:取一个大于数组中元素数的素数(P)。随机挑选第一项。然后将数组视为一个环(或仅使用result
处理重叠),按所选的P递增。不确定这个算法是否有一个合适的名字,我在几年前的某个地方读过它。js中的快速脏实现%
clustercount = Array(size = c, filled_with = 0) i = randint(0, p) complete = 0 while (complete < c*m) { if (clustercount[points[i].cluster] < m) { clustercount[points[i].cluster] = 1 + clustercount[points[i].cluster] plot(points[i]) complete = complete + 1 } i = i + p % n }