很抱歉这篇文章与编码无关,但更多的是数据结构和算法。
我有大量的数据,每个都有不同的频率。近似的数字图似乎是贝尔曲线。我现在想要在最精确描述范围频率的范围内显示数据。
例如整个数据范围总数没有。频率但这个范围或桶尺寸不精确并且可以更精确(例如,如果某些数据更集中在特定频率区域,我们可能会建立一个数据量更小但频率更密切相关的存储桶。)
关于某些算法的任何帮助。
我想到了与二进制搜索相关的算法。
任何想法的人。
答案 0 :(得分:4)
我不确定我是否关注,但似乎你正在寻找k
bean,对于每两个bean,数据落入一个bean的概率是相同的,因为它在另一个bean中。
根据您的说明,您的数据似乎是normally分发的,或T-distributed。
可以评估数据的均值和标准差,让提取的S.D.是s
,平均值为u
。
评估平均值和S.D.的标准公式。来自样本的是 1 :
u = (x1 + x2 + ... + xn) / n (simple average)
s^2 = Sigma((xi - u)^2)/(n-1)
根据此信息,您可以评估数据的分布,即N(u,s^2)
。根据此信息,您可以创建随机变量:X~N(u,s^2)
2
现在剩下的就是找到a,b,......如下(假设10个桶,显然可以根据需要修改):
P(X<a) = 0.1
P(X<b) = 0.2
P(X<c) = 0.3
...
找到a,b,c,......你有你的豆子:( -infinity,a],(a,b),(a,c],......
(1)评估方差:http://en.wikipedia.org/wiki/Variance#Population_variance_and_sample_variance
(2)这个变量的实际分布实际上是t分布,因为方差是未知的 - 并从数据中提取。但是 - 足够大n
- t分布衰减为正态分布。
答案 1 :(得分:-1)
首先计算所有索引,然后减去重复值,这将为您提供最佳的桶数。但是在很小的水平上