以下方法的复杂性是什么?

时间:2010-06-04 17:07:01

标签: complexity-theory big-o

我还在学习使用Big O Notation的复杂度测量,想知道我是否正确地说下面的方法的复杂性是 O(n * log4n),其中“4”是下标。

public static void f(int n)
{
    for (int i=n; i>0; i--)
    {
        int j = n;
        while (j>0)
            j = j/4;
    }
}

3 个答案:

答案 0 :(得分:6)

是的,你是对的,函数的复杂性是O(n*log_4(n))

Log_4(n) = ln(n) / ln(4)ln(4)是常量,因此,如果您的函数具有复杂性O(n*log_4(n)),那么它的复杂性为O(n*ln(n))

答案 1 :(得分:3)

你的意思是

public static void f(int n) 
{ 
    for (int i=n; i>0; i--) 
    { 
        int j = i;  // Not j = n.
        while (j>0) 
            j = j/4; 
    } 
} 

在这种情况下,你也是对的。这是O(nlogn)。使用4作为下标也是正确的,但它只会使编写起来更麻烦。

即使使用j=n行,也是O(nlogn)。

事实上,为了更准确,你可以说它是Theta(n logn)。

答案 2 :(得分:1)

是的,你是对的,复杂性是n * log4(n)