for循环中n * n * n次迭代的时间复杂度是多少?

时间:2017-01-18 17:41:14

标签: c algorithm data-structures time-complexity big-o

这些循环的时间复杂度是多少?如果我错了,请纠正我。

这个循环是O(n ^ 3),因为它有(n ^ 3)/ 2 + 1次迭代。

for (int i = 0; i < n * n * n; i+=2)
{
     //body
}

该循环为O(n ^ 3 * m ^ 2),因为它具有(n ^ 3 + 1)*(m ^ 2 + 1)次迭代。或者这只是O(n ^ 3),因为内环不是变量n?

for (int i = 0; i < n * n * n; i+=2)
{
     for (int j = 0; j < m * m; j++)
     {
     //Body
     }
}

3 个答案:

答案 0 :(得分:4)

在第一种情况下,时间复杂度为O(n^3)。它捕获最重要的术语,因此您忽略了1/2和常量+1的缩放因子。在后一种情况下,除非您将O(n^3 * m^2)视为常量而不是变量,否则它为m。在Big-O表示法中,您不需要只有一个变量来表示输入数据的大小。

答案 1 :(得分:2)

  

这个循环是O(n ^ 3),因为它有(n ^ 3)/ 2 + 1次迭代。

正确。

  

该循环为O(n ^ 3 * m ^ 2),因为它具有(n ^ 3 + 1)*(m ^ 2 + 1)次迭代。或者这只是O(n ^ 3),因为内环不是变量n?

两者都是正确的。这取决于您将m视为变量还是常量。

答案 2 :(得分:0)

在渐近符号中,可以有多个变量。 对于考虑n和m作为变量的第二种情况,复杂度将为O(n ^ 3 * m ^ 2)。如果将m视为常数,则复杂度为O(n ^ 3)。