Java 为什么这是n(平方)复杂度?

Java 为什么这是n(平方)复杂度?,java,time-complexity,Java,Time Complexity,当有三个for循环时,为什么代码的复杂性为n^2?你如何区分代码的不同复杂性?代码如下: int size1= sc.nextInt(); int size2 = sc.nextInt(); int value=0; for(int k=0;k<size1;k++) { value++; //5 times for(int x=0;x<size2;x++) {

当有三个for循环时,为什么代码的复杂性为n^2?你如何区分代码的不同复杂性?代码如下:

    int size1= sc.nextInt();
    int size2 = sc.nextInt();

    int value=0;
    for(int k=0;k<size1;k++)
    {
        value++;
        //5 times
        for(int x=0;x<size2;x++)
        {
            value++;
            //15 times
            for(int i=0;i<x;i++)
            {
                value++;
                //15 times
            }
        }
    }


    System.out.println(value);

}
int size1=sc.nextInt();
int size2=sc.nextInt();
int值=0;

对于(int k=0;k我想你指的是复杂度而不是效率。这是O(nˆ2)的原因是它具有二次复杂度,因为第三个循环使用第二个变量


更多信息。

如果我们假设n=size1=size2,那么代码的复杂性是O(n^3)


如果只有SiZe2=n和SiZe1=k(小常数),则复杂性为O(kn ^ 2),如果我们只考虑变量n为大,则为O(n ^ 2)。< < P > >代码> n=siZe1=siZe2 >代码运行在O(n ^ 3)中。即使第三个循环使用第二个变量,它仍然是立方的。如果我们只考虑最后两个循环,则指令<代码>值++;< /C> >将执行n(n-1)。/2次我的答案不仅仅是链接。我澄清了问题并用一种简单的方式回答。没有链接,它仍然是一个有效的答案。我不确定你的意思是什么…大小1和大小2?谁告诉你复杂度是O(n^2)?完整的链接在这里,我修改了一点:如果你的链接大小1=k。因此代码的复杂度是O(kn^2),即O(n^2)关于n(例如,如果k是常数且很小)。您总是计算一些变量的复杂性。这意味着复杂性没有明确的答案?当size1=size2和size1!=size2时?您总是必须计算一些变量的复杂性。这里的复杂性总是size1*size2*(size2-1)/2,即k*n*(n-1)/2。但是我们通常用一个大的O表示法来表示复杂度(比如O(n^2)),这里给出了O(kn^2)。现在你必须知道哪个变量是重要的,哪个变量可以是大的。在你的例子中,k=2,n是可以取大值的变量。因此复杂度是O(n^2)。但是,如果k是n的数量级(这里似乎不是这样),复杂性是O(n^3)。假设大小1仅从1-300,大小2仅从1-30,那么我可以说它是O(n^2)吗?