c – 计算分位数而不存储
作者:互联网
我编写了c代码来计算1亿个双精度数的119个分位数(从10 ^ -7到1 – 10 ^ -7).
我当前的实现将数字存储在向量中,然后对向量进行排序.
有没有办法计算分位数而不存储数字?
谢谢
ADDENDUM(对不起我的英文):
这是我正在做的事情:
1)在[0,1]中生成20个均匀分布的随机数
2)我将这些数字输入到算法中,该算法输出具有未知均值和未知方差的随机数
3)在步骤2存储号码
重复1,2和3亿次(现在我收集了10 ^ 8个具有未知均值和未知方差的随机数).
现在我使用公式“R-2,SAS-5”对这些数字进行排序,以计算从10 ^ -7到1 – 10 ^ -7的119个分位数:
https://en.wikipedia.org/wiki/Quantile#Estimating_quantiles_from_a_sample
由于程序是多线程的,内存分配太大,我只能使用5个线程而不是8个线程.
解决方法:
这是streaming algorithms领域的一个问题(您需要在不存储每个元素的情况下对数据流进行操作).
对于分位数流算法有众所周知的算法(例如,here),但是如果你愿意使用分位数近似,那么这是一个相当容易的问题.只需使用reservoir sampling从n个元素中均匀地采样m,并计算样本上的分位数(通过您所做的方法:将m个样本存储在矢量中,然后对其进行排序).尺寸m影响近似的精度(参见例如here).
标签:quantile,c,algorithm 来源: https://codeday.me/bug/20190824/1706764.html