前缀和算法的时间复杂度

时间:2018-04-03 16:31:41

标签: algorithm time-complexity computer-science prefix-sum

鉴于以下伪代码,我想知道在尝试确定时间复杂度时我的思维过程是否正确。

for i = 0 to n-1
   Add the numbers A[0] thru A[i].
   Store the result in B[i].

算法将循环n次,并且由于最后一次迭代将需要最多的计算(n次计算),因此算法将总计进行n^2 + f(n)次计算。其中f(n)是度n^2 或更少的多项式。 因此,此算法为二次O(n^2)

2 个答案:

答案 0 :(得分:3)

由于Add the numbers A[0] thru A[i].的时间复杂度为\Theta(i),因此代码的时间复杂度为\Theta(1 + 2 + 3 + ... + \Theta(n)) = \Theta(n^2)。因此,您对代码的分析是正确的。

答案 1 :(得分:0)

我们可以使用以下代码替换您的代码

    for i 0 to n - 1
        for j 0 to i
            b[i] += a[j]   <---

为了找到这个算法的大O,我们需要计算多少 第三行被执行的时间。

为了简单起见,我们假设所有[i]元素都等于1 因此,如果我找到b [i]的总和,当i为0到n -1时 然后我们找到第3行的运行时间。

i: b[i]
0: 1
1: 2
2: 3
..
n - 1: n
因此,所有B [i]的总和是n *(n + 1)/ 2 这是O(n ^ 2)