嵌套顺序循环的大O表示法

时间:2013-04-03 04:22:11

标签: big-o

我一直在搜索关于大O符号的论坛并且学到了很多东西。我的问题非常具体,我认为一个独特的案例会更好地帮助我理解大O,我忽略了常量。

我理解循环是否遍历所有元素而不是O(n)。

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

}

如果一个循环通过所有n,在另一个遍历所有n的循环中,它会乘以n * n = n ^ 2

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

    }
}

最后如果一个循环后跟另一个遍历所有元素的循环,那么它是n + n = 2n

for(int j = 0; j < n; j++)
{

}
for(int k = 0; k < n; k++)
{

}

我的问题直接进入这些代码行

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

    }
    for(int k = 0; k < n; k++)
    {

    }
    for(int l = 0; l < n; l++)
    {
        for(int m = 0; m < n; m++)
        {

        }
    }

}

基于上述规则,我计算大O为n *(n + n + n * n),即n ^ 3 + 2n ^ 2。那么这会使我的大O(n ^ 3)还是我的大O会是O(n ^ 3 + 2n ^ 2)。我错了吗?或者我在球场附近的某个地方?主要是我试图弄清楚这些循环是否小于O(n ^ 4)。提前谢谢。

1 个答案:

答案 0 :(得分:2)

big-O表示法用于表征算法的渐近行为,取决于表示数据量的某个值n,但与任何常数无关,例如:处理器速度 在您的示例中,n ^ 3比2n ^ 2生长得快,即,对于大n,与n ^ 3相比可以忽略2n ^ 2。因此,嵌套循环的渐近行为具有阶O(n ^ 3)。

相关问题