Big o 找出循环的复杂性
以下代码药剂的时间复杂度T(n)是多少?为简单起见,可以假设n是2的幂。也就是n=2^k。对于某些正整数kBig o 找出循环的复杂性,big-o,time-complexity,Big O,Time Complexity,以下代码药剂的时间复杂度T(n)是多少?为简单起见,可以假设n是2的幂。也就是n=2^k。对于某些正整数k for(i=1;;I<=n;i++) for(j=n/2;j<n;j++) print x; for(i=1;;i所以让我们编写一些迭代: i j 1 0 to n-1 2 1 to n-1 3 1 to n-1 4 2
for(i=1;;I<=n;i++)
for(j=n/2;j<n;j++)
print x;
for(i=1;;i所以让我们编写一些迭代:
i j
1 0 to n-1
2 1 to n-1
3 1 to n-1
4 2 to n-1
5 2 to n-1
.
.
.
n-2 (n-2)/2 to n-1
n-1 (n-2)/2 to n-1
n n/2 to n-1
现在让我们记住1st
和nth
,并计算从i=2
到i=n-1
的范围总和(end-start+1
)
S = (n-1 - 1 + 1) + (n-1 - 1 + 1) + (n-1 - 2 + 1) + (n-1 - 2 + 1) + ... + (n-1 - (n-2)/2 + 1) + (n-1 - (n-2)/2 + 1)
最后是算术级数,由公式计算:
N*(A1 + A2)/2
其中:
N = (n - 2)/2, A1 = 1, A2 = (n - 2)/2
因此,我们最终得出以下结论:
1 + 2 + 3 + ... + (n - 2)/2 = n*(n - 2)/8
现在,让我们添加我们记住的两个值:
S = n + n/2 + n^2 - 2*n - n*(n - 2)/4
我没有得到上面的任何一个。我已经检查并重新检查了,但没有找到错误。你认为它是什么?为什么?看起来很像…我认为它是T(n)=n+1,因为第一个循环T(n)=n,因为在第二个循环中,我们除以2,1 n将被取消..我不确定!
N*(A1 + A2)/2
N = (n - 2)/2, A1 = 1, A2 = (n - 2)/2
1 + 2 + 3 + ... + (n - 2)/2 = n*(n - 2)/8
S = n^2 - 2*n - 2*(n*(n - 2)/8)
S = n^2 - 2*n - n*(n - 2)/4
S = n + n/2 + n^2 - 2*n - n*(n - 2)/4
S = (4*n + 2*n + 4*n^2 - 8*n)/4 - n*(n - 2)/4
S = (4*n + 2*n + 4*n^2 - 8*n - n^2 + 2*n)/4
S = (3/4)*n^2