循环-此算法的Big O分析是什么?

我正在研究数据结构课程,但不确定如何进行此Big O分析:

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++;

我最初的想法是还原后为O(n ^ 3),因为最里面的循环仅在j/i没有余数且乘法规则不适用时才会运行。 我的推理在这里正确吗?

user2986376 asked 2020-07-22T04:08:52Z
1个解决方案
50 votes

让我们在此忽略外循环一秒钟,然后根据O(n^4)对其进行分析。

中间循环运行O(n^4)次,并且每当n都调用内部循环,这意味着您在O(n^4)上运行,并且每次运行直到相关的j,这意味着内部循环运行时间总和为:

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

最后的等式来自算术级数的总和。
以上是O(n^4)

对外部循环重复此操作,该循环从O(n^4)n,您将获得O(n^4)的运行时间,因为您实际上有:

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)

最后一个方程式来自立方和
上面是O(n^4),这是您的复杂性。

amit answered 2020-07-22T04:09:42Z
translate from https://stackoverflow.com:/questions/29152881/what-is-the-big-o-analysis-of-this-algorithm