求N ^ 2个元素的中位数(大规模)

时间:2012-04-20 16:43:07

标签: algorithm median large-scale

问题是这样的: 假设我们有N台机器,并且每台机器都可以操纵它的N个元素,那么,我们如何才能以最低的成本找到所有N ^ 2个元素的中位数?

这真让我烦恼,希望得到你们的回答,谢谢!

抱歉,我只是把它写得太简单了。存储在每台机器中的元素是随机的,没有订单。而成本包含I / O成本,以及机器之间的通信,RAM,时间也应该考虑一切。我只是想找到获得中位数的最有效方法。

这些是我提出的一些解决方案:

  1. 使用合并排序等外部排序,找到中位数。
  2. 使用桶排序,根据其值将所有元素划分为X个连续桶,因此我们可以决定中位数所在的桶。扫描桶,我们将获得中位数。
  3. 我认为“算法导论”中的O(N)算法中的第k个数字应该在这里工作吗?
  4. 但是,所有这些解决方案都需要额外的机器来完成这项工作。我想知道是否有一种方法我们只能使用这N台机器来获得中位数?

    谢谢!

3 个答案:

答案 0 :(得分:0)

您需要有一个计算所有值的流程(所有商店的总数)。选择中间指数。将索引调整为相应计算机上项目开头的偏移量。要求该机器对项目进行排序并返回该索引的值。

答案 1 :(得分:0)

Step 1: Sort the numbers at each machine individually
Step 2: Send the median at each machine to a central place
Step 3: Sort the medians and send it to each machine
Step 4: For each element in the sorted medians calculate the rank at machine level
Step 5: Calculate the rank of each element over all machines (just sum the rank)
Step 6: Find two elements in the sorted medians between which the global median exists
Step 7: For the next iteration consider only elements between those two medians 
        and repeat the whole thing again

在最坏的情况下,第二次迭代中的所有剩余元素都将在一台机器上。

复杂性:很确定它是O(nlogn)(即包括腭化它可以是O(n ^ 2logn)

答案 2 :(得分:0)

你能估计它而不是准确地得到它吗?

如果是这样,选择常数K并将K系数多项式拟合到每台机器上的数据,将系数发送到添加它们的中央机器,然后通过

找到中位数

  1. 在曲线上积分曲线以找到曲线下面积
  2. 执行根寻找算法以找到将该区域分成两半的点。
  3. K越大,误差越小。 K越小,效率就越高。