时间复杂度嵌套循环

时间:2015-08-01 04:37:43

标签: algorithm big-o time-complexity

我很难理解算法分析,尤其是以下示例:

for (int i = 1; i < n^3; i = 2*i){
  for (int j = 6*n; j > 0; j = j-2){
  }
}

所以我对此的理解是外部循环为O(nlogn),因为 i 乘以常量,我不确定n^3是否为差异与否。

内圈让我最困惑。我认为O(n)因为 j 会减少一定量,但我不确定6*nj > 0是否有影响。

如果我正确,那么整个算法将是O(nlogn)?不确定如何表达这个时间复杂度T(n)

非常感谢任何见解。

1 个答案:

答案 0 :(得分:3)

外部循环不是O(nlogn) - 因为i在每个循环中乘以2,它变为:2,4,8,16,32 ...这意味着它将采用日志(n ^ 3)步骤i达到n ^ 3(日志的基数为2)。

更正式:O(log(n^3)) = O(3logn) = O(logn)

在内循环中,j初始化为6*n,并以2为步长向下移动。这意味着j达到零需要6n / 2步。< / p>

更正式:O(6n/2) = O(3n) = O(n)

因此代码部分的复杂性为O(n) * O(logn) = O(nlogn)