Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 大型阵列中值的并行计算_Parallel Processing_Median - Fatal编程技术网

Parallel processing 大型阵列中值的并行计算

Parallel processing 大型阵列中值的并行计算,parallel-processing,median,Parallel Processing,Median,有人问过我一次这个问题,但我仍然没有弄明白: 你有一个N整数数组,其中N很大,比如说10亿。要计算此数组的中值。假设您有m+1台机器(mworkers,一个master)来分配作业。你打算怎么做 由于中位数是一个非线性运算符,您不能只在每台机器中找到中位数,然后取这些值的中位数。您可以进行高度并行排序(如合并排序)并从结果中获取中位数。对数组进行排序会不会有些过分?如果没有,那么我的建议是将数组分割,然后将结果合并在一起。根据具体情况,算法可能会有所不同。(注:上一句中链接到的pdf仅包含许多可

有人问过我一次这个问题,但我仍然没有弄明白:

你有一个
N
整数数组,其中
N
很大,比如说10亿。要计算此数组的中值。假设您有
m+1
台机器(
m
workers,一个master)来分配作业。你打算怎么做


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

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

对数组进行排序会不会有些过分?如果没有,那么我的建议是将数组分割,然后将结果合并在一起。

根据具体情况,算法可能会有所不同。(注:上一句中链接到的pdf仅包含许多可能的pdf文档中的一部分)

求中值是求第i个元素的特例。这个问题叫做“选择问题”,所以你需要在网上搜索平行选择

这里有一篇可能有用的论文(不幸的是,不是免费的):


谷歌关于查询“并行选择”的第一个链接给出了:它实际上使用中位数来解决一般问题,而不仅仅是中位数查找。

m+1机器之间有什么样的通信系统?可能的dup:在某些情况下,这可能并不过分。如果log(n)不是难以置信的高(这里只有30),那么进行并行排序是值得的——至少在排序更普遍的情况下是这样。