【发布时间】:2016-04-01 00:31:35
【问题描述】:
我编写了 C++ 代码来计算 1 亿个双精度数字的 119 个分位数(从 10^-7 到 1 - 10^-7)。 我当前的实现将数字存储在向量中,然后对向量进行排序。 有什么方法可以在不存储数字的情况下计算分位数?
谢谢
附录(对不起我的英语): 这是我正在做的事情:
1) 在[0, 1)中生成20个均匀分布的随机数
2) 我将这些数字输入到一个算法中,该算法输出一个具有未知均值和未知方差的随机数
3) 在第 2 步存储号码
重复 1、2 和 3 1 亿次(现在我收集了 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个。
【问题讨论】:
-
但是如果您不存储这些数字,您以后将如何检索它们?你到底想做什么?
-
有一种众所周知的方法可以通过使用堆来找到分布的中位数。看看你的具体问题是否适用于类似的问题?
-
@Carlos 但是你需要将数字存储在堆中,不是吗?
-
你的意思是“不存储”还是“不排序”?
-
@RedX:计算集合的最小值/最大值可以在不存储数字的情况下完成。这个问题是关于概括的。