繁体   English   中英

为什么这是 n(square) 复杂度?

[英]why is this n(square) 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++)
        {
            value++;
            //15 times
            for(int i=0;i<x;i++)
            {
                value++;
                //15 times
            }
        }
    }


    System.out.println(value);

}

如果我们假设 n=size1=size2,你的代码的复杂度是O(n^3) \\sum_{k=0}^{size_1-1} \\sum_{x=0}^{size_2-1} \\sum_{i=0}^{x-1} 1=\\sum_{k=0}^{ size_1-1} \\sum_{x=0}^{size_2-1}x=\\sum_{k=0}^{size_1-1}\\frac{(size_2-1)(size_2)}{2}=\\frac {(size_1)(size_2)(size_2-1)}{2}=O(n^3)

如果只有 size2=n 和 size1=k(小常数),复杂度是 O(kn^2),如果我们只考虑变量 n 大的话,就是 O(n^2)。

我认为您的意思是复杂性而不是效率。 这是 O(n^2) 的原因是它具有二次复杂性,因为第三个循环使用第二个变量。

更多信息在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM