给定一组数字,使用Map Reduce返回所有其他数字的产品数组

时间:2015-02-22 08:35:04

标签: java arrays algorithm mapreduce complexity-theory

最近在采访中被问到: 解决以下问题,然后通过 Map Reduce

进行操作

有一个N个数字的数组A [N]。你必须组成一个数组Output [N],使得Output [i]将等于除A [i]之外的所有A [N]元素的乘法。  例如,Output [0]将A [1]乘以A [N-1],Output [1]将乘以A [0]和A [2]乘以A [N-1]。  在没有除法运算符的情况下解决它并在O(n)中解决。

我能够正常解决它但不确定如何使用MapReduce完成它。

正常解决方案:Given an array of numbers, return array of products of all other numbers (no division)

1 个答案:

答案 0 :(得分:1)

正如评论中的amit注释,如果我们仅限于一个MapReduce,那么,在一些合理的假设下,我们能做的最好的事情就是通过将数组A作为模拟来模拟二次算法键值对

0: (n, A[0]), 1: (n, A[1]), ..., n-1: (n, A[n-1]),

将其映射为

i: (n, A[i]) ->
  [(  0: A[i]), ..., (i-1: A[i]),
   (i+1: A[i]), ..., (n-1: A[i])],

然后减少

i: [A[0], ..., A[i-1], A[i+1], ... A[n-1]] ->
  i: A[0] ... A[i-1] A[i+1] ... A[n-1].

使用lg n MapReduces,我们可以做更高效的并行prefix product