是否有一个快速算法在MapReduce框架上运行,以从一个巨大的整数集中找到中位数?
答案 0 :(得分:5)
这是我将如何做到的。这是顺序quickselect的一种并行版本。 (有些map / reduce工具可能不会让你轻松做事......)
选择输入集的一小块任意块。按顺序排序。我们将并行使用这些作为一大堆枢轴。调用此数组pivots
,并将其大小设为k
。
执行map / reduce,如下所示:对于输入集中的每个值x
,使用二进制搜索查找x
相对于pivots
的位置;称这个职位为bucket(x)
。这是0
和k
之间的整数。 reduce步骤是计算每个桶中的元素数量;将bucket[b]
定义为x
bucket(x) = b
的数量。
中位数必须在“中位数桶”中。挑出该中位数桶中的所有值,并使用传统的顺序选择算法来查找具有正确索引的元素。