【发布时间】:2017-06-05 03:57:47
【问题描述】:
给定一个正整数数组A,我想找到以下总和S:
S = 2^1 * (S_1) + 2^2 * (S_2) + 2^3 * (S_3) + ... + 2^n * (S_N)
其中S_i 是A 中连续i 整数的乘积之和,例如:
S_3 = (A[0]*A[1]*A[2]) + (A[1]*A[2]*A[3]) + .... + (A[n-3]*A[n-2]*A[n-1])
为了计算任何S_i,我使用类似于滚动哈希的方法,实现O(N):
Let tmp = A[0]*A[1]*A[2], S_3 = tmp;
For(i = 3 to n)
(tmp *= A[i]) /= A[i-3]
S_3 += tmp
对于所有两个的力量,我可以预先进行预计算。所以现在我计算S的算法是O(N^2)
我的问题是,是否可以计算出更复杂的S?
【问题讨论】:
-
我认为你不能,因为你必须单独计算每一行,因为你不能做任何算术简化。每行需要 O(n) 并且有 n 行。我很确定 O(n^2 是绝对最小值)
-
(tmp *= A[i]) /= A[i-3]— 如果A[i-3] == 0,这不会失败吗? -
@squeamishossifrage 都是正面的,抱歉我错过了
标签: algorithm math time-complexity