找到程序的运行时间

时间:2015-01-05 16:03:39

标签: c++ performance algorithm

我是Algorithms和DS的新手。我指的是一本书,它有一些问题,我很难理解。

我需要找到以下程序的运行时间:(评论仅来自书本)

function(int n) {
    for(int i=1;i<=n/3;i++) { // will execute n/3 time
        for(int j=1;j<=n;j+=4) { // will execute n/4 times
            printf("*");
        }
    }
}

答案:O(n ^ 2)

怎么样n ^ 2?第一个循环将执行n / 3次,第二个循环执行n / 4。 n / 3 * n / 4 = n ^ 2/12。怎么样n ^ 2?请帮我理解。

问题2

function(int n) {
    for(int i=0;i<n;i++) { // will execute n times
        for(int j=i;j<i*i;j+=4) { // will execute n*n times ?????? (How?) 
            if(j%i==0) {
                for(int k=0;k<j;k++) { // will execute j times
                    printf("*");
                }
            }
        }
    }
}

答案:O(n ^ 5)

第一个循环执行n次。细

第二个循环如何执行n * n次?这里,j的值初始化为i,所以不应该是(n * n)-i次?如果j被初始化为0,那么它将是n * n次,对吗?

第三个循环执行j次因为k

请帮助我理解为什么第二个循环(j)将执行n * n次。谢谢。

1 个答案:

答案 0 :(得分:0)

这本书涉及大哦。对大哦的完整介绍太长了,但是在大地方它坚持:

O(a*f(n)) = O(f(n))

a常量。

另一个是:

O(a_k * n^k+ a_(k-1) n^(k-1)+...+a_0) = O(n^k)

f(n)随机函数。


关于第二个问题:第二个循环从i运行到i*i。现在,由于i将达到n-1,因此其大小为O(n),因此循环将在上次运行(n-1)*(n-1)次时执行。由于j最终会达到某个订单O(n^2)而第三个循环从0运行到j-1,因此第三个(最内部)循环的时间复杂度为{{ 1}}。因此,这意味着循环的总时间复杂度为:

O(n^2)