【时间复杂度与空间复杂度】

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)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容