当迭代从1变为i * i时,时间复杂度是多少

时间:2016-03-31 06:01:02

标签: c++ time-complexity complexity-theory

好的,所以我一直在想,当for循环从1迭代到n * n时,时间复杂度是多少。 有人可以在下面的程序中详细说明时间复杂度吗?

for(i = 1 ; i < n ; i++)
   for(j = 1 ; j < i*i ; j++)
      for(k = 1 ; k < j ; k++)

另外,有点麻烦:

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

4 个答案:

答案 0 :(得分:5)

i = 1..n
j = 1..i*i
k = 1..j

WolframAlpha says O(n^5)

答案 1 :(得分:5)

我认为第一个是O(n^5)。 j完成i ^ 2次,所以k。

i -> n
j -> n^2
k -> n^2

因此它是O(n^5)

修改 关于第二部分,数字的最大除数N小于2 * sqrt(N)。因此,我们可以说for(k=1; k < j; k++)的上限是O(sqrt(j)) = O(n)

因此,第二部分的上限是O(n^4)

答案 2 :(得分:4)

要评估的总和是

有一个equation for polynomial sums,但重要的是,前导词总是比被求和的多项式高一个数量级。即,答案是O(n ^ 5)。

直接查看类型为

的循环的答案
for(i = 1 ; i < n ; i++)
  for(j = 1 ; j < i ; j++)

只需将内循环设置为最差情况,即可计算出正确的答案

for(i = 1 ; i < n ; i++)
  for(j = 1 ; j < n ; j++)

直接给出了答案,例如O(n ^ 2)。

在余数的情况下,条件影响i ^ 2-i情况可能的i ^ 2。因此,循环实际上只运行了一次。内循环仍然运行到n ^ 2。因此总体复杂度为O(n ^ 4)。

编辑:修复了剩余案例的答案。

答案 3 :(得分:3)

对于扭曲的我觉得的是, 外循环(i迭代器)将迭代n次。 - &GT; ñ j迭代器将迭代1 + 2 + ... n ^ 2次。所以基本上做到了 - &gt;为O(n ^ 3) 对于外循环(if迭代)的每次迭代,i条件将成立i次,因为j一直持续i * i所以内循环(k迭代器)将执行n次(与外循环相同; i迭代器)。内循环内的最终代码将执行1 ^ 3 + 2 ^ 3 + 3 ^ 3 .... n ^ 3次。这使得总复杂度为O(n ^ 4)。

但我也不会对此感到如此自信。