这个三层嵌套循环的最大作用是什么?

时间:2019-01-25 19:48:16

标签: algorithm big-o

外环为O(n),第二环为O(n ^ 2),第三环也为O(n ^ 2),但第三环是有条件的。

这是否意味着第三次循环仅发生1 / n次(每n次1次),因此总的大O为O(n ^ 4)?

   for (int i = 1; i < n; i++) {
        for (int j = 1; j < (n*n); j++) {
            if (j % i == 0) {
                for (int k = 1; k < (n*n); k++) {
                    // Simple computation
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:3)

对于介于1和 n 之间的任何给定值 i ,这部分的复杂性:

    for (int j = 1; j < (n*n); j++) {
        if (j % i == 0) {
            for (int k = 1; k < (n*n); k++) {
                // Simple computation
            }
        }
    }

O n 4 / i ),因为{ {1}}-条件在时间的第 i 次为真。 (请注意:如果 i 可以大于 n ,那么我们需要编写 O n 4 / i + n 2 )以包含循环迭代的成本,其中if条件为假;但由于已知 i 足够小,因此 n 4 / i n 2 ,我们不必为此担心。)

因此,将 i 的所有值上不同的循环迭代加在一起的代码总复杂度为 O n 4 / 1 + n 4 / 2 + n 4 / 3 +⋯+ n 4 / n )́ = O n < sup> 4 ·(( 1 / 1 ++ 1 / 2 + 1 < / sup> / 3 +⋯+ 1 / n )))= O < / em>( n 4 log n

(最后一点依赖于这样的事实,因为ln( n )是 1 / x < / sub>从1到 n ,并且 1 / x 在该间隔内减小,我们有ln( n )<< ln( n +1)<((sup> 1 / 1 ++ sup> 1 / 2 + 1 / 3 +⋯+ 1 / n )<< 1 + ln( n )。)