最近在采访中被问到: 解决以下问题,然后通过 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)
答案 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。