如何计算这些简单循环的时间复杂度?

时间:2013-03-23 04:51:24

标签: big-o time-complexity

我明白了:

for (int i=0; i<n; i++)

此时间复杂度为O(n)

for (int i=0; i<n; i++)
    for (int j=0; j<n; j++)
        for (k=0; k<n; k++)

这是O(n^3)对吧?

i=1
do
    //......
    i++
while (i*2 <n)  

这是O(n)吗?或者它是O(n/2)

4 个答案:

答案 0 :(得分:1)

O(n/2) O(n),系数为1/2。系数可以是100亿,它仍然是O(n),而不是例如O(n^(1.0001))这是一个不同的复杂性类。

答案 1 :(得分:1)

O(n 3 中的第一个,你是对的。

您的第二个算法是 O(n / 2) = O(Cn) = O(n) 1/2 是一个常数,所以我们可以放弃它。

答案 2 :(得分:1)

第一个复杂度O(n ^ 3),正确。 第二个,O(cn),c常数。无论c多大,根据big-O的定义,复杂性仍然是O(n)。

然而,O符号被认为是有害的。请参阅here

答案 3 :(得分:0)

这段代码:

i=1
do
    //......
    i++
while (i*2 < n);

等同于那个:

for ( i = 1; i < n / 2 ; ++ i );

表面上看,这是O(n)