【发布时间】:2020-03-27 09:25:08
【问题描述】:
1.
for(i=0; i<N, i+=2)
for(j=0; j<i; j+=2)
a[i] += i*j;
printf("Elements: ");
for(i=N; i>0; i--)
printf("%d ", a[i]);
2. while(N) {
printf("%d ", N);
N /= 2;
}
在第一个问题中,我知道因为它是一个嵌套的 for 循环,所以我会得到 O(n^2),但由于还有另一个 for 循环,我不太确定。 对于第二个循环,我无法理解 N/2 时会发生什么。
【问题讨论】:
-
你真的应该修正你的缩进,为了可读性..
-
重复乘法是指数,重复除法是对数(指数的反函数)。
-
使用大括号和缩进重新格式化代码。没有它们,很难确定哪些语句在哪些循环中。
-
不要只记住“嵌套循环是 O(n^2)”之类的东西,因为这并不总是正确的。如果内部循环中的条件是
j < 100,那么嵌套循环对的复杂度就是 O(n)。
标签: c++ c data-structures big-o