我需要为以下代码找到O符号:
for(i = 0; i < N; i++){
for(j = 0; j < N; j+=i){
x+=y;
}
}
我能够把它降到O(N * log(N)),但我想确定。
这种功能是否有我可以查找和研究的名称?
答案 0 :(得分:6)
您的代码是O(∞)。在第一个外部循环中,i
为0,这意味着j
的增量为0,因此当N > 0
时内部循环变为无限循环。
答案 1 :(得分:5)
对于从0开始的情况:
您的代码为O(∞),如ShadowRanger的answer所述。
对于从1开始的情况:
您可以简单地使用您的实际复杂度 f(N)的观察结果:
f(N) <= N/1 + N/2 + N/3 + ... + N/N
<= N * (Bound of value of Harmonic Number)
< c1 * N * ( log (N) ) i.e. O( N log(N) )
要证明Harmonic number的值为O( log(N) )
,您可以使用简单的微积分。请参阅here和here。