计算大量数据的中位数

时间:2015-07-13 04:09:11

标签: c++ algorithm sorting

我有大量的数据(> 10000000),类型为int,我想要计算每个新项目的中位数(所以我将有> 1000000 medians)。我应该维护一个排序列表并按顺序将项目插入此列表中,然后每次计算中位数,或者我应该插入每次都对列表​​进行排序。

std::vector也是适合此的数据结构吗?或者其他数据结构是否会提供更好的复杂性

注意:我不能使用std::set,因为可能还有重复项如果使用std::multiset查找中位数会增加复杂性,因为我将从开始循环到中间以获取其值。

1 个答案:

答案 0 :(得分:2)

我会使用std::multiset,因为它可以处理重复项并自动维护排序顺序。我会逐个插入数字,保持一个指向中位数的迭代器(向前或向后踩取决于新元素是大于还是小于中位数。)

请注意,如果它太大而无法在内存中保持舒适,则可以将大量最高和最低元素打包到文件中;

表示,中位数不太可能会移动那么远,如果确实如此,你可以解压缩并重新包装。