设n是偶数,运行下面的程序段后计算语句m=m+1的次数,并给出该程序段的时间复杂度。
m=0;
for(i=1; i<=n; i++)
for(j=2*i; j<=n; j++)
m=m+1;
次数=n*(n/2)/2=0.25*n^2
所以O(n)=n^2
这是等差数列求和公式,对于内循环,第一次循环n次,第二次n-2,第三次n-4...直到0,也就是2*i>n就不循环了。对于整个程序,就是所有内循环次数求和。
,也可以近似计算为O(n^2)
算一下四行代码分别执行次数
第一行 1次
第二行 n次
第三行 n*(n/2)/2次
第四行 n*(n/2)/2次
所以总的花费时间应该是1+n+2n*(n/2) /2= n^2/2 + n + 1
时间复杂度o(n^2) m执行次数n*(n/2)/2次
计算时间复杂度的简易计算方法有,存在K次遍历为K*O(n),存在二分遍历为O(logN),存在K层嵌套遍历则为O(N^K),将以上三个法则进行组合即可得到大众常用理解的时间复杂度,剩下一些更为复杂的随机遍历过N分遍历方式都不能用指定唯一的复杂度来评判。