任何人都可以告诉我以下两个java代码的时间复杂性(a)& (b)中

时间:2017-11-29 18:57:18

标签: java algorithm time-complexity

我对这两个代码的时间复杂性感到困惑:

代码1:

我想它的O(n ^ 3)

void easy(in n, int x, inty) 
{
    for(int i=0; i<n: ++i) { //o(n)
        if(x<y) {
            for(int k=0: k < n*n: ++k) { //o(n^2)
                System.out.println("k =" +k);
            }
        } else {
            System.out.println("i =" +i);
        }
    }
} 

代码2:

void find(int n)
{
    for(int i=0; i<20; ++i) {   //o(1)
        for(int j=0: j<n; ++j) {   //o(n)
            for(int k=0; k<j; ++k)   //o(n)
                System.out.println("k =" +k);

            for(int m=0; m<i; ++m) //o(1)
                Systen.out.println("m =" +m);
        }
    }
}

我想它的o(n ^ 2)

1 个答案:

答案 0 :(得分:1)

在第一个片段中,您有一个n次迭代的外循环。然后该循环的主体执行n^2操作(如果x<y)或一个操作(如果x>=y)。这意味着运行时间为O(n)O(n^3),具体取决于xy的值。

在第二个代码段中,您有一个外部循环,其i变量不依赖于n。它从1变为20,这意味着你可以将它计算为恒定的时间量,所以让我们摆脱那个循环。

我们还有以下循环:

for(int j=0: j<n; ++j) {
    for(int k=0; k<j; ++k)
        System.out.println("k =" +k);

    for(int m=0; m<i; ++m)
        Systen.out.println("m =" +m);
}

现在外循环有n次迭代。第二个内部循环取决于i,它是常量,因此整个循环需要恒定的时间。

第一个内循环需要O(n),因为k0变为j,而j0变为{{} 1}}。因此总运行时间为n