问题是这样的: 假设我们有N台机器,并且每台机器都可以操纵它的N个元素,那么,我们如何才能以最低的成本找到所有N ^ 2个元素的中位数?
这真让我烦恼,希望得到你们的回答,谢谢!
抱歉,我只是把它写得太简单了。存储在每台机器中的元素是随机的,没有订单。而成本包含I / O成本,以及机器之间的通信,RAM,时间也应该考虑一切。我只是想找到获得中位数的最有效方法。
这些是我提出的一些解决方案:
但是,所有这些解决方案都需要额外的机器来完成这项工作。我想知道是否有一种方法我们只能使用这N台机器来获得中位数?
谢谢!
答案 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系数多项式拟合到每台机器上的数据,将系数发送到添加它们的中央机器,然后通过
找到中位数K越大,误差越小。 K越小,效率就越高。