user2986376
user2986376

Reputation: 451

What is the Big O analysis of this algorithm?

I'm working on a data structures course and I'm not sure how to proceed w/ this Big O analysis:

sum = 0;
for(i = 1; i < n; i++)
     for(j = 1; j < i*i; j++)
         if(j % i == 0)
             for(k = 0; k < j; k++)
                   sum++;

My initial idea is that this is O(n^3) after reduction, because the innermost loop will only run when j/i has no remainder and the multiplication rule is inapplicable. Is my reasoning correct here?

Upvotes: 44

Views: 2191

Answers (1)

amit
amit

Reputation: 178451

Let's ignore the outer loop for a second here, and let's analyze it in terms of i.

The mid loop runs i^2 times, and is invoking the inner loop whenever j%i == 0, that means you run it on i, 2i, 3i, ...,i^2, and at each time you run until the relevant j, this means that the inner loop summation of running time is:

i + 2i + 3i + ... + (i-1)*i  = i(1 + 2 + ... + i-1) = i* [i*(i-1)/2] 

The last equality comes from sum of arithmetic progression.
The above is in O(i^3).

repeat this to the outer loop which runs from 1 to n and you will get running time of O(n^4), since you actually have:

C*1^3 + C*2^3 + ... + C*(n-1)^3 = C*(1^3 + 2^3 + ... + (n-1)^3) = 
= C/4 * (n^4 - 2n^3 + n^2)

The last equation comes from sum of cubes
And the above is in O(n^4), which is your complexity.

Upvotes: 49

Related Questions