并行计算大数组的中位数

时间:2010-05-28 21:02:30

标签: parallel-processing median

我被问过这个问题一次,仍然无法弄清楚:

你有一个N整数数组,其中N很大,比如十亿。您想要计算此数组的中值。假设您有m+1个机器(m个工作人员,一个主人)来分配作业。你会怎么做呢?

由于中位数是一个非线性算子,你不能只找到每台机器的中位数,然后取这些值的中位数。

3 个答案:

答案 0 :(得分:5)

根据Parallel Computation Model,算法可能会有所不同。 (注意:前面句子中链接的pdf只包含许多可能的内容)。

找到中位数是找到i th 元素的特例。此问题称为“选择问题”,因此您需要在Web上搜索并行选择。

以下是一篇可能有用的论文(不幸的是,不是免费的):Parallel Selection Algorithms With Analysis on Clusters

谷歌查询“并行选择”的第一个链接给出:http://www.umiacs.umd.edu/research/EXPAR/papers/3494/node18.html实际上使用中位数的中位数来解决一般问题而不仅仅是中位数发现。

答案 1 :(得分:1)

您可以执行高度可并行化的排序(如合并排序)并从结果中获取中位数。

答案 2 :(得分:0)

对数组进行排序是否过度杀伤?如果没有,那么将数组分开,然后将结果合并在一起是我的建议。