为什么这个时间复杂度为O(n)?

时间:2014-01-27 18:29:24

标签: complexity-theory

为什么以下函数的时间复杂度为O(n)?我无法理解我的生活。

void setUpperTriangular (
    int intMatrix[0,…,n-1][0,…,n-1]) {
        for (int i=1; i<n; i++) {
            for (int j=0; j<i; j++) {
                    intMatrix[i][j] = 0;
            } 
        }
    }
}

我将最终时间复杂度保持为O(n ^ 2),因为:

i: execute n times{//Time complexity=n*(n*1)
    j: execute n times{ //Time complexity=n*1
        intMatrix[i][j] = 0; //Time complexity=1
    }
}

4 个答案:

答案 0 :(得分:8)

代码遍历数组中的n^2/2(半个矩阵)位置,因此它的时间复杂度为O(n^2)

答案 1 :(得分:1)

这与循环的插入排序相同。插入排序的时间复杂度为O(n2)。

答案 2 :(得分:0)

因此,CS部门主管以不同的方式解释了它。他说,由于第二个循环不会迭代n次,它会迭代n!倍。从技术上讲,它是O(n)。

答案 3 :(得分:0)

它最多可以被认为是O(n.m),最终归结为O(n.n)或O(n ^ 2)..