这两个for循环的复杂性是什么?

时间:2013-09-15 11:36:44

标签: java algorithm complexity-theory

这个算法的时间复杂度是多少?我最初的猜测是 O(log [n])

int array[] = new int[100];
int counter = 0;

for ( int i = 0; i < array.length; i++ ) {
    for ( int j = i + 1; j < array.length; j++ ) {
        if ( array[i] == array[j] ) {
            counter++;
        }
    }
}

5 个答案:

答案 0 :(得分:3)

代码中的if部分执行约1 + 2 + 3 +...+ nn - i - 1其中i = 0...n - 1,等于0,5*n*(n+1) O(n^2) }。

答案 1 :(得分:2)

不。这是 O(N ^ 2)。

在“如何确定复杂性”下查看here第4节

答案 2 :(得分:0)

有两种可能的答案。技术上正确的是O(1),因为数组具有恒定的长度,因此内循环迭代的数量是常数。

如果我们假设数组的长度为n,则内循环的迭代次数为n-1,n-2,n-3,...,1,0。算术级数的总和长度为n,从0开始,为O(n^2)

答案 3 :(得分:0)

The order is O(n^2).

说明:假设数组长度为n。
然后迭代第一个循环:
第二次循环会有n-2次迭代 总时间为:(n-2)+(n-2)+ ............(n-2)//为n-1次
这将是:(n-1)*(n-2)。

答案 4 :(得分:0)

推断算法时间复杂度的正式方法:

enter image description here