我给了这个算法,并且我被告知要找到它的复杂性。
for (i = 1; i <= n; i++) {
j = n;
while( j >= 1) {
j = j/3;
}
}
我知道外循环运行n次。 while循环更棘手,是否可能是log n(基数为3)。总计n * log 3 n
这是对的吗?
答案 0 :(得分:0)
有一个大小为n的外部for循环。它给所有复杂性带来了 n 因素的复杂性。
让我们说内部while循环运行m次。在迭代之后,j的值将是n /(3 ^ i)。我们将运行这个直到n /(3 ^ i)&gt; 1.因此,
=> n/(3^i) = m
=> n = 3^m
=> log(n) = log2(3) * m
=> m = O(log(n))
因此,for循环有助于O(n),而while循环有助于O(log(n))。嵌套循环的复杂性变为O(n log(n))。