我还在学习使用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;
}
}
答案 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)