鉴于以下伪代码,我想知道在尝试确定时间复杂度时我的思维过程是否正确。
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)
。
答案 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)