algorithm - 如何在不保存整个数组且空间不变的情况下计算排序数组的精确中位数?

标签 algorithm awk gawk median

我需要从输入读取排序数组到 awk/gawk 并获取中位数。我不想存储整个数组,而是想为计算获取恒定的空间。

您是否知道有任何算法可以做到这一点?给定数组已排序但其大小未知。

提前致谢!

最佳答案

没有算法可以准确找到以固定内存量运行的未知长度的排序序列的中值。

要了解这一点,请考虑这样一种算法。假设它有一个长度为 N 的缓冲区,用于保存序列中的项目。在这个缓冲区满之前,该算法只是将项目放入其中,同时跟踪中位数。

当算法扫描第 N+1 项及以后的项时,它必须在每一步中选择一个项来丢弃。假设它已经扫描了 2N 项,丢弃了其中的一半。让我们相信它,并说它还没有降低输入流的中值。

考虑它何时扫描第 2N+1 个项目。它应该掉落哪个元素?它不能丢弃到目前为止保留的最少元素,因为输入可能在此项目之后耗尽,在这种情况下,最低的可能是中位数。同样,对于它可能丢弃的任何可能元素,输入序列都有一个 future ,使这个丢弃的元素成为中位数。

如果您愿意采用近似 结果,那么this estimator可能适合你。

关于algorithm - 如何在不保存整个数组且空间不变的情况下计算排序数组的精确中位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7721297/

相关文章:

python - 协助矩阵求常数次方

javascript - 根据一些配置数据转换事件数据

algorithm - 计算 "Introduction to Algorithms: A Creative Approach"平面中的区域

bash - 从文件中的行中提取特定字符串并输出到另一个文件并进行修改

unix - 在 AWK 中为多个文件更改 FS

awk - 用 OFS 分隔的 AWK 打印所有字段

algorithm - 更新树并跟踪某些子树节点的变化

linux - 第一列中相同值的第二列和第三列之和

linux - 将字符串作为 gawk 中的命令求值

bash - awk、gsub、& 符号和意外扩展