找到循环的复杂性

时间:2016-02-05 01:10:56

标签: algorithm big-o time-complexity complexity-theory

我给了这个算法,并且我被告知要找到它的复杂性。

for (i = 1; i <= n; i++) {
    j = n;
    while( j >= 1) {
        j = j/3;
    }

}

我知道外循环运行n次。 while循环更棘手,是否可能是log n(基数为3)。总计n * log 3 n

这是对的吗?

1 个答案:

答案 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))。