我有这段代码:
int f = 0;
for(int i=1 ; i<m ; i=i*2) {
for(int l=500 ; l<700 ; l++) {
f++;
}
for(int j=n ; j>0 ; j=j/2) {
f++;
}
for(int k=0 ; k<m ; k=k+3) {
f++;
}
f += 10;
}
其中m和n作为参数给出。
到目前为止,我已经计算过:
循环的主要指数递增,这意味着它的时间效率为O(log m)
循环的第一个消耗恒定时间O(200)
,因此它不会影响代码的时间效率。
循环的第二个减少了每次迭代n的值的1/2,因此其时间效率为O(log n)
第三个周期增量为3,每次迭代=&gt;时间效率O(m/3)
,但我们不需要常量,因此O(m)
总而言之,当我们结合所有内容时,O(log(m) * (log n + m))
。
此分析是否正确?
答案 0 :(得分:0)
使用Sigma表示法,您可以有条不紊地找到: