以下程序的时间复杂度是多少?

时间:2014-03-18 00:16:20

标签: java time-complexity

如何计算以下程序的时间复杂度?

int[] vars = { 2, 4, 5, 6 };
int len = vars.length;
int[] result = new int[len];

for (int i = 0; i < len; i++) {
    int value = 1;

    for (int k = 0; k < i; k++) {
        value = value * vars[k];
    }
    for (int j = i + 1; j < len; j++) {
        value = value * vars[j];
    }

    result[i] = value;
}

以上如何与以下相同?

for (int i = 0; i < len; i++) {
    int value = 1;

    for (int j = 0; j < len; j++) {
        if(j != i) {
            value = value * vars[j];
        }
    }

    result[i] = value;
}

3 个答案:

答案 0 :(得分:2)

i for循环具有时间复杂度O(n),因为它对数组的每个元素执行一次迭代。对于数组中的每个元素,您再次循环遍历{ - {1}} k循环中的平均值的一半,以及for j循环中的平均值的一半。其中每个都是for。如果数组中有4个元素,则操作数与n *(n - 1)成比例,但在时间复杂度上,忽略O(n)等常量。

您的方法将执行的操作数量与其中的元素数量成正比,因此,总体而言,该方法为O(n 2 )。

答案 1 :(得分:1)

对于第一个片段:

enter image description here

对于第二个片段:

enter image description here

答案 2 :(得分:0)

确定复杂性的一般方法是计算迭代次数。 在您的示例中,您有一个外部for循环,其中嵌套了两个循环。注意:我不会写len而是写n。 外循环

for (int i = 0; i < n; i++)

迭代n - 次。 两个下一个循环的迭代次数实际上比它看起来更容易计算: 第二个循环迭代i - 次和第三个n-i次。如果将它们一起添加,则得到n - 在外循环中进行多次迭代。

最后,如果外部循环执行n次迭代,并且在每次迭代中,代码循环另外n次,您将获得n^2次迭代的结果。在您编写的复杂性理论的传统表示法中,算法的上限为n^2或位于O(n)