好的,所以我一直在想,当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++)
答案 0 :(得分:5)
i = 1..n
j = 1..i*i
k = 1..j
答案 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)。
但我也不会对此感到如此自信。