Big o 找出循环的复杂性

Big 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

以下代码药剂的时间复杂度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       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