给定代码的时间复杂度分析

时间:2015-10-07 20:03:24

标签: time complexity-theory

如何根据问题大小n找到时间复杂度?

sum = 0;
if (EVEN(n)) {
    for (i = 0; i < n; i++) {
        if (i % 2 == 0) {
            O(logn)
        }
        else {
            sum++;
        }
    }
}
else {
    sum = sum + n;
}

1 个答案:

答案 0 :(得分:1)

答案是:O(N log N)

考虑最差情况EVEN(n),for循环将执行 N 次或 O(N)时间。

for循环中代码的最坏情况复杂性是 O(log N)

然后,将for循环的复杂性与其内容的复杂性相乘。

因此, O(N) * O(log N) = O(N log N)

编辑:关于for循环中的代码...

由于 O(log N)执行仅在i % 2 == 0时运行,这意味着它只运行for循环的每隔一次迭代。因此,真正的复杂性是 O(0.5log N),但是由于在计算复杂度时丢弃了所有常量,因此复杂性仍然是 O(log N),并且最终答案仍然是 O(N log N)