algorithm - 如何在不存储列表的情况下计算或近似列表的中位数

标签 algorithm optimization median

我正在尝试计算一组值的中位数,但我不想存储所有值,因为这可能会超出内存要求。有没有一种方法可以在不存储和排序所有单个值的情况下计算或近似中位数?

理想情况下,我想编写如下代码

var medianCalculator = new MedianCalculator();
foreach (var value in SourceData)
{
  medianCalculator.Add(value);
}
Console.WriteLine("The median is: {0}", medianCalculator.Median);

我只需要实际的 MedianCalculator 代码!

更新:有些人问我尝试计算中位数的值是否具有已知属性。答案是肯定的。一个值以 0.5 为增量,从大约 -25 到 -0.5。另一个也是从 -120 到 -60 以 0.5 为增量。我想这意味着我可以为每个值使用某种形式的直方图。

谢谢

尼克

最佳答案

如果值是离散的并且不同值的数量不是太多,您可以只累加每个值在直方图中出现的次数,然后从直方图计数中找到中位数(只需将直方图的顶部和底部,直到到达中间)。或者,如果它们是连续值,您可以将它们分配到箱子中——这不会告诉您确切的中位数,但它会给您一个范围,如果您需要更精确地了解,您可以再次遍历列表,只检查中央仓中的元素。

关于algorithm - 如何在不存储列表的情况下计算或近似列表的中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/638030/

相关文章:

c# - 中值维护算法 - 相同的实现会根据 Int32 或 Int64 产生不同的结果

optimization - 利用 64 位寄存器的最酷的多操作技巧? (无 SIMD/SSE/AVX)

php - 使用 PHP 和 MySQL - 需要良好且安全的 OO 设计

php - 内存/优化问题

Java:无法使用代码计算中位数

Python - 从文件中获取列迭代器(无需读取整个文件)

python - 如何在 Python 3 的列表中初始化和递增未定义的值?

javascript - 如何使用特定字符的索引搜索特定单词的索引

r - 在 R 中使用 KNN (k = 2) 时不断对小数据集进行不同的预测

c# - 按月将一个列表拆分为多个 - C#、Linq