嵌套循环的复杂性,外循环变量每次迭代减半

Complexity Of Nested Loop, With Outer Loop Variable Diminishing By Half Each Iteration

void G(....) 
{
  for ( int k = n/2; k > 0; k /= 2 ) 
  { 
    for ( int m = 0; m < n; m++) 
      a[(k+m)%n]=k+m;
  }                      
}

当循环启动器和增量分别类似于 (n/2)(k/=2) 时,我不确定如何计算循环操作......等等。 运行 编译器上针对不同 n 值的这段代码给了我有趣的结果,例如如果 n 是 2^x,那么对于 n 的值迭代是 n * x 直到 2^(x+1) -1。现在我卡住了,不知道将其归类为哪个 Big Oh 函数。欢迎大家answers/feedback/suggested学习methods/explanations!

外循环 运行s for k = n / 2, n / 4, n / 8, ..., *。 总共 运行s Θ(log(n)) 次 - 这是将 n / 2 减少到 1 所需的顺序连续除以 2。

对于k的每个值,不考虑值,内层循环运行sn次,以此类推Θ(n) 时间内的内循环 + 主体 运行。

由于无论外循环的值如何,内循环+主体都需要相同的时间,我们需要将外循环的次数运行s乘以运行ning内循环+主体的时间。这是 Θ(n log(n)).