2个嵌套for循环的时间复杂度

时间:2013-04-02 00:42:00

标签: time complexity-theory

这个问题是为了修改过去的试卷 只是想知道我做得对吗

根据给定整数n的运算次数计算出下面一段代码的时间复杂度T(n):

    for ( int i = 1; i < n*n*n; i *= n ) {
      for ( int j = 0; j < n; j += 2 ) {
         for ( int k = 1; k < n; k *= 3 ) {
         // constant number C of elementary operations
         }
       }
     }

到目前为止,我已经提出了n ^ 3 * n * log n = O(n ^ 4 log n)

2 个答案:

答案 0 :(得分:1)

我会去的。

第一个循环是 O(1)常量,因为它总是运行3次迭代(1*n*n*n == n*n*n)。

for ( int i = 1; i < n*n*n; i *= n )

第二个循环是 O(0.5n)= O(n)

for ( int j = 0; j < n; j += 2 )

第三个循环是 O(log n)

for ( int k = 1; k < n; k *= 3 )

因此算法的时间复杂度为 O(n log n)

答案 1 :(得分:0)

我认为你错过了关键点。我没有在问题的任何地方看到它要求你解决Big-Oh方面的复杂性。相反,它要求给定整数n的操作数。

这是我的解决方案,

对于给定的n,内部循环变量连续采用以下内容 值:k = 1,3 ^ 0,3,3 ^ 2 ,. 。 。 ,3 ^(m-1)

因此,内部循环对每对值执行C log3n操作 变量j和i。

中间循环变量j取n = 2个值,

对于给定的n,外循环变量i取三个值,1,n和n ^ 2.

因此整段代码的时间复杂度等于T(n)= 3C(n / 2)log3n = 1.5Cnlog3n。

您可能需要查看此内容,但这是我对您的问题的解释。