j + = i的O符号

时间:2017-10-14 20:25:22

标签: c data-structures big-o

我需要为以下代码找到O符号:

for(i = 0; i < N; i++){
  for(j = 0; j < N; j+=i){
    x+=y;
  }
}

我能够把它降到O(N * log(N)),但我想确定。
这种功能是否有我可以查找和研究的名称?

2 个答案:

答案 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) ),您可以使用简单的微积分。请参阅herehere