开发者

Why is this code considered O(N^6) in Big Oh notation?

I was just reading another question and this code intrigued me:

for(i = 0; i < n; i++)
{
    for(j = 0; j < i*i; j++)
    {
        for(k = 0; k < i*j; k++)
        {
            pseudo_inner_count++;
            for(l = 0; l < 10; l++);
        }
    }
}

I don't understand how this can be O(N^6). Can someone break开发者_如何转开发 it down for me?


Actually it is:

  • The i loop iterates O(N) times, so the value of i is O(N), so we can say O(I)=O(N).
  • The j loop iterates O(I^2) = O(N^2) times (when considered on its own, without the outer loop).
  • The k loop iterates O(I*J) = O(N*N^2) = O(N^3) times.
  • The l loop just iterates 10 times so that is O(1).

The loops are nested so we have to multiply these together (do you understand why?). The total is O(N)*O(N^2)*O(N^3) = O(N^6).


It's

n for the first loop n² for the second loop n³ for the third loop

The inner loop is O(1)

The total is O(n⁶).

The reason the third loop is n³ is because when you think about it j reaches n² and i reaches n, so i*j reaches n³.


I would say :

  • n for the first loop
  • n² for the second loop => total of n³
  • n² for the third loop => total of n⁵
  • yet another n-loop => total of n⁶
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜