使用 MapReduce 查找大整数集的中值

发布于 2024-11-28 09:28:32 字数 50 浏览 0 评论 0原文

是否有一种快速算法可以在 MapReduce 框架上运行以从巨大的整数集中找到中位数?

Is there a fast algorithm to run on MapReduce framework to find the Median from a huge Integer set?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

2024-12-05 09:28:32

我就是这样做的。这是顺序快速选择的一种并行版本。 (某些映射/归约工具可能无法让您轻松完成任务...)

选择输入集中的一个任意小块。按顺序对此进行排序。我们将并行地将它们用作一整套枢轴。将此数组称为pivots,并使其大小为k

按如下方式执行映射/归约:对于输入集中的每个值 x,进行二分搜索以查找 x 相对于 pivots 的位置;将此位置称为bucket(x)。这是 0k 之间的整数。 reduce步骤是统计每个bucket中元素的数量;将 bucket[b] 定义为 x 的数量,其中 bucket(x) = b

中位数必须位于“中位数桶”中。选出该中值桶中的所有值,并使用传统的顺序选择算法来查找具有正确索引的元素。

Here's how I would do it. This is a sort of parallel version of sequential quickselect. (Some map/reduce tools might not let you do things quite as easily...)

Pick a small, arbitrary chunk of the input set. Sort this sequentially. We're going to use these as a whole bunch of pivots, in parallel. Call this array pivots, and let its size be k.

Perform a map/reduce as follows: for each value x in the input set, binary-search to find x's position relative to pivots; call this position bucket(x). This is an integer between 0 and k. The reduce step is to count the number of elements in each bucket; define bucket[b] to be the number of x with bucket(x) = b.

The median must be in the "median bucket." Pick out all the values in that median bucket, and use a traditional sequential selection algorithm to find the element with the correct index.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文