Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算分位数而不存储 我编写C++代码来计算119个位数(从10 ^ 7到1 - 10 ^ - 7),其中100千个双精度数字。 我当前的实现将数字存储在向量中,然后对向量进行排序。 有没有不存储数字就计算分位数的方法_C++_Algorithm_Quantile - Fatal编程技术网

计算分位数而不存储 我编写C++代码来计算119个位数(从10 ^ 7到1 - 10 ^ - 7),其中100千个双精度数字。 我当前的实现将数字存储在向量中,然后对向量进行排序。 有没有不存储数字就计算分位数的方法

计算分位数而不存储 我编写C++代码来计算119个位数(从10 ^ 7到1 - 10 ^ - 7),其中100千个双精度数字。 我当前的实现将数字存储在向量中,然后对向量进行排序。 有没有不存储数字就计算分位数的方法,c++,algorithm,quantile,C++,Algorithm,Quantile,多谢各位 附录(对不起我的英语): 以下是我正在做的: 1) 在[0,1]中生成20个均匀分布的随机数 2) 我将这些数字输入一个算法,该算法输出一个具有未知均值和未知方差的随机数 3) 在步骤2存储该号码 重复1、2和3亿次(现在我收集了10^8个均值和方差未知的随机数) 现在,我使用公式“R-2,SAS-5”对这些数字进行排序,以计算从10^-7到1-10^-7的119个分位数: 由于程序是多线程的,内存分配太大,我只能使用5个线程而不是8个线程。这是一个来自领域的问题(您需要在不存储每个

多谢各位

附录(对不起我的英语): 以下是我正在做的:

1) 在[0,1]中生成20个均匀分布的随机数

2) 我将这些数字输入一个算法,该算法输出一个具有未知均值和未知方差的随机数

3) 在步骤2存储该号码

重复1、2和3亿次(现在我收集了10^8个均值和方差未知的随机数)

现在,我使用公式“R-2,SAS-5”对这些数字进行排序,以计算从10^-7到1-10^-7的119个分位数:


由于程序是多线程的,内存分配太大,我只能使用5个线程而不是8个线程。

这是一个来自领域的问题(您需要在不存储每个元素的情况下对数据流进行操作)


分位数流算法有很多众所周知的算法(例如),但如果您愿意使用分位数近似,这是一个相当简单的问题。只需使用从n个元素中均匀采样m,然后计算样本上的分位数(使用您所使用的方法:将m个样本存储在向量中,并对其排序).大小m影响近似值的精度(例如,请参见)。

在计算分位数之前,您需要知道一组数字

这可以通过存储数字来实现,但您也可以制作/使用一个多过程算法,该算法可以在每次运行时学习一小部分

如果分位数的某些不准确度是可以接受的,则该问题也有近似的单通算法。以下是一个示例:


编辑**忘记,如果您的数字有许多重复项,您只需要存储数字及其出现的次数,而不是每个重复项。根据输入的数据,这可能是一个显著的差异。

但是如果您不存储数字,您以后将如何检索它们?您到底想做什么?有一种众所周知的方法来查找数字使用堆计算分布的中值。看看你的具体问题是否适用于类似的情况?@Carlos,但你需要将数字存储在堆中,不是吗?你是说“不存储”还是“不排序”?@RedX:计算一个集合的最小/最大值不需要存储数字。这个问题是关于一个泛化的问题。我不确定是否理解“ency.pdf”,因为它似乎建议存储大小为m的子样本,但我生成10^8个随机数,因为我需要分位数的最佳估计。我还尝试了q-digest算法,但在本例中它“压缩”示例。是否有使用所有10^8数字的简单程序?@Cristiano我稍后会看一看。