如何根据问题大小n找到时间复杂度?
sum = 0;
if (EVEN(n)) {
for (i = 0; i < n; i++) {
if (i % 2 == 0) {
O(logn)
}
else {
sum++;
}
}
}
else {
sum = sum + n;
}
答案 0 :(得分:1)
考虑最差情况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)。