分析下方代码时间复杂度 【代码的调度次数】
n = 10;
for(i = 1;i< n; i++)
for(j=1;j<n;j+=n/2)
for(k=1; k<n;k=2*k)
x+=1;
看这个代码可知,x+=1;是循环最内侧代码,其时间复杂度最高,所以求这句代码的复杂度就可以。
从内到外看。
K循环从1 == 2的N次方每次开始是2的倍数,一直到>n-1;所以这层循环的运行次数是 log(n) 次。时间复杂度O(log(n)) //[log 默认底数为2]
j循环从1开始递增n/2次。一直到n-1;第一次递增之后j 变成(n+2)/2 .
第二次递增则是j=n+1,so.循环了两次。但是时间复杂度还是O(1) //因为常数的时间复杂度都是O(1)
i 循环从1开始每次增加1 一直到n-1 。所以循环体运行n-1次。时间复杂度为O(N)、 最后相乘得到的总时间复杂度就是O(N*1*LOG(N)); //强调一下。时间复杂度都不带常数项或者常熟系数的。所以不存在所谓的 O(2n) 这样的时间复杂度
@author Yars丶xiaowei