您的位置:首页 > 编程语言 > Go语言

What is the Big O analysis of this algorithm?(Stackoverflow)

2015-03-20 16:17 501 查看
Question:

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?

Answer:

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐