Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 816
user2986376 Avatar asked Mar 19 '15 19:03

user2986376


People also ask

What is Big O and small O in analysis of algorithms?

Big-Ο is used as a tight upper bound on the growth of an algorithm's effort (this effort is described by the function f(n)), even though, as written, it can also be a loose upper bound. “Little-ο” (ο()) notation is used to describe an upper bound that cannot be tight.

What is its Big O complexity?

Big O notation is used to describe the complexity of an algorithm when measuring its efficiency, which in this case means how well the algorithm scales with the size of the dataset.


Video Answer


1 Answers

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.

like image 77
amit Avatar answered Sep 23 '22 18:09

amit