计算一大块代码的时间效率

时间:2014-11-08 17:25:01

标签: algorithm big-o

我有这段代码:

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))

此分析是否正确?

1 个答案:

答案 0 :(得分:0)

使用Sigma表示法,您可以有条不紊地找到:

enter image description here