整数在一个范围内的乘法

时间:2013-08-21 14:23:40

标签: algorithm data-structures modular-arithmetic

A是一个包含最多10个 5 整数的数组。

我们必须在log(N)复杂度上对此数组执行2种操作(其中,N = A 中的元素数量)。

操作1,给定 v i j 我们必须将 v 添加到 A [k] (i< = k< = j)

操作2,给定 i & j 计算(A [i] * A [i + 1] * A [i + 2] * .... * A [j])%M 。 (M是素数,对于所有操作都是相同的。)

将会进行近10次 5 操作。

如果在log(N)中不可能,那么执行操作的最大复杂性是什么?

2 个答案:

答案 0 :(得分:1)

由于看起来您必须访问范围[i, j]中的所有元素,因此复杂性取决于该范围的线性大小,

答案 1 :(得分:0)

j-i可能是N的顺序,你必须改变它们中的每一个。保罗说,这使得任何算法都比O(N)更快。 K不是问题的参数,它只是一个变量,因此Bidhan的答案中的log(K)没有意义。

现在,如果问题不是关于时间复杂性的问题,而是关于大规模并行操作树的高度(例如你在CUDA上的那个),那么,给定足够的线程,就可以轻松地执行操作1在O(1)中由于所有操作的独立性,操作2在O(log(N))中通过乘以mod M对相邻元素(需要100000/2个线程),然后成对的相邻结果等,直到答案为止到了。

然而,这不是问题。除非你如何执行,否则禁止大规模并行计算每个操作的复杂度为O(N)。