【发布时间】:2011-10-21 13:05:04
【问题描述】:
是否有在 MapReduce 框架上运行的快速算法以从巨大的整数集中找到中位数?
【问题讨论】:
标签: mapreduce
是否有在 MapReduce 框架上运行的快速算法以从巨大的整数集中找到中位数?
【问题讨论】:
标签: mapreduce
我会这样做。这是顺序快速选择的一种并行版本。 (某些 map/reduce 工具可能无法让您轻松地完成任务……)
从输入集中任意选择一小块。按顺序排序。我们将并行使用这些作为一大堆支点。将此数组称为pivots,并将其大小设为k。
如下执行map/reduce:对于输入集中的每个值x,二分查找x相对于pivots的位置;打电话给这个职位bucket(x)。这是0 和k 之间的整数。 reduce步骤是统计每个bucket中的元素个数;将bucket[b] 定义为x 和bucket(x) = b 的编号。
中位数必须在“中位数桶”中。挑选出该中位数桶中的所有值,并使用传统的顺序选择算法找到具有正确索引的元素。
【讨论】: