嵌套for循环的波浪符号的复杂性

时间:2015-04-19 09:01:24

标签: java algorithm time-complexity

如何在以下算法的tilde notation中找到复杂性:

for (int j = 0; j < N; j++) {

    for (int k = j + 1; k < N; k++) {

        array[k] = array[j];

    }

    array[j] = k
}

如果N = 9我已经制作了一个内部for循环循环次数的表:

|     j      | # of loops  | 
|:-----------|------------:|
|     0      |      8      |          
|     1      |      7      |       
|     2      |      6      |         
|     3      |      5      |         
|     4      |      4      |     
|     5      |      3      | 
|     6      |      2      |
|     7      |      1      |
|     8      |      0      |

1 个答案:

答案 0 :(得分:1)

在评估时,内部迭代次数从8线性减少到0,即平均为4,总共4.9=36。< / p>

更一般地说,平均值为(N-1)/2,总数为N.(N-1)/2

因此,I(N) ~ N²/2就迭代次数而言。

就内存访问(R + W)而言,它是双倍的:A(N) ~ N²。 (外部循环中的额外访问添加了可忽略的N贡献。)