for i in range(1,N): #两个操作:O(N)+O(N)=O(N)
a = a + rand() #N*1个操作 = O(N)
b = b + rand(); # N*1个操作 = O(N)
for i in range(1,N/2):
b = b+rand() #N/2 * 1 个操作 = 1/2 * O(N) = O(N) 忽略前面的常数
时间复杂度:O(N)
空间复杂度:定义了a,b与范围N无关:两个单位的内存空间 = O(1),常数的时间复杂度
int a = 0;
for(i=0;i<N;i++){ #外层操作N次
for(j=N;j>i;j--){
a = a+i+j;
}
}
i=0: j=N到1
i=1: j=N到2
...
i=N-1: j=N
操作总数:1+2+3+...+N = N*(N+1)/2
时间复杂度:O(N^2)
空间复杂度:O(1),只用到变量a,i,j,与范围N无关
int a = 0,i=N;
while(i>0){
a += i; # 一操作
i /= 2; # 二操作
}
假设N=40;i=40
i=20 2个操作
i=10 2
i=5 2
i=2 2
i=1 2
i=0 2
total:2*6次操作
2*log(N) = 2*O(logN)
int i,j,k=0;
for(i=n/ 2;i<=n;i++)
for (j=2; j<=n;j=j*2)
k=k+n/2;
O(N*logN)
网友评论