2013-04-03 35 views
0

我一直在搜索大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 = 2的所有元素變爲

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)。提前致謝。

回答

2

大O符號用於表徵算法的漸近行爲,取決於指示數據量的某個值n,但與任何常數無關,例如,處理器速度。
在你的例子中,n^3的生長比2n^2更快,即對於大的n,2n^2與n^3相比可以忽略不計。因此,嵌套循環的漸近行爲的階數爲O(n^3)。