我一直在搜索关于大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)。提前谢谢。
答案 0 :(得分:2)
big-O表示法用于表征算法的渐近行为,取决于表示数据量的某个值n,但与任何常数无关,例如:处理器速度 在您的示例中,n ^ 3比2n ^ 2生长得快,即,对于大n,与n ^ 3相比可以忽略2n ^ 2。因此,嵌套循环的渐近行为具有阶O(n ^ 3)。