void function(int N){
int c=0;
for (int i =0; i< N; i+= N/5)
c++;
}
上面的大O是什么?由于对于每 N 循环将迭代 5 次,它会是 O(1) 吗?
void function(int N){
int c=0;
for (int i =0; i< N; i+= N/5)
c++;
}
上面的大O是什么?由于对于每 N 循环将迭代 5 次,它会是 O(1) 吗?
由于对于每 N 循环将迭代 5 次,它会是 O(1) 吗?
恰恰。运行时间只取决于一个常数——5——所以它的边界是 O(1)。
假设例如N = 100
。让我们画一个表格:
Iteration | i
----------+------
0 | 20
1 | 40
2 | 60
3 | 80
4 | 100
请注意,您选择的值无关紧要N
,迭代次数最多为 5。因此我们得出结论,i
不依赖于N
.
所以..你是对的,它是O(1)
。
上面的例子和循环有什么区别:for(i=0;i<N;i+=20)
?
如果你画桌子,你会得到同一张桌子!但是,在这种情况下,结果取决于的值N
。如果你选择N = 200
,你会得到超过 5 个。所以在这种情况下,结果将是O(N)
。
是的,结果不取决于 N。
正式回答您的问题如下: