关于O(n ^ 2logn)

时间:2013-03-12 05:29:24

标签: big-o

void function(int n ) {
    int i, j , k ;
    for ( i = n/2 ; i <= n ; i ++) 
        for ( j = 1; j + n/2 <= n; j++ ) 
            for ( k = 1; k <=n ; k = k*2 )
                count ++;
}

外循环执行n / 2次, 中间循环执行n / 2次和 内部llop执行登录时间。

上述函数的复杂度为O(n ^ 2logn),但n / 2和n / 2将如何变为n ^ 2?

由于

3 个答案:

答案 0 :(得分:0)

循环是嵌套的,因此它们的所有计数都会相乘。 (n / 2)*(n / 2)是n ^ 2/4,但常数与big-O无关; n ^ 2/4 = O(n ^ 2)并且这样写。

答案 1 :(得分:0)

对于Big O表示法,省略常量:“如果f(x)是多个因子的乘积,则省略任何常量(产品中不依赖于x的项)。”

所以你的内部循环是logn,你的中间和外部循环是n / 2,但是一起那是(n / 2)*(n / 2)* logn = 1/4(n ^ 2logn),并且1 /丢弃4以得到O(n ^ 2logn)。

参考: http://en.wikipedia.org/wiki/Big_oh_notation

答案 2 :(得分:0)

您的算法的确切迭代次数及其增长复杂度的顺序如下所示:

enter image description here

支持文件:here