我被问过这个问题一次,仍然无法弄清楚:
你有一个N
整数数组,其中N
很大,比如十亿。您想要计算此数组的中值。假设您有m+1
个机器(m
个工作人员,一个主人)来分配作业。你会怎么做呢?
由于中位数是一个非线性算子,你不能只找到每台机器的中位数,然后取这些值的中位数。
答案 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)
对数组进行排序是否过度杀伤?如果没有,那么将数组分开,然后将结果合并在一起是我的建议。