包含嵌套循环的代码的时间复杂性

时间:2015-02-15 00:49:19

标签: algorithm time-complexity pseudocode

i := n;
WHILE i > 1
    FOR j := i to n DO
        X;
    END
    FOR j := 3*i to 3*n DO
        X;
    END
    DEC(i); (* i decrement *)
END

对于这个伪代码,我必须计算函数f:N - > N,取决于n。我第一次做这样的事情,所以我甚至不知道我的方法是否正确。所以,在第一行我有1个恒定的时间。 while循环运行n-1次+ n次比较,n-1恒定时间减少。第一个for循环运行n-i + 1次。第二个for循环运行3n-3i + 1次。 所以(我认为)那就是公式:f(n)= 1 +((n-1)+ n +(n-1))*((n-i + 1)+(3n-3i + 1))那将是f(n)= 12n ^ 2 -12ni -2n + 8i -3

但现在我有ni个变量?如何摆脱i

1 个答案:

答案 0 :(得分:0)

我们假设"到n"意味着"最后一个值是n-1" (在时间复杂度方面并不重要 - 请参阅最终解释)。

f(X) =运行时间复杂度X

总时间是:

1 +
0 + 0 +                   // i=n
f(X) + 3*f(X) +           // i=n-1
2*f(X) + 6*f(X) +         // i=n-2
3*f(X) + 9*f(X) +         // i=n-3
...
(n-2)*f(X) + 3*(n-2)*f(X) // i=2
------------------------------
1 + 4*f(X) + 8*f(X) + 12*f(X) + ... + 4*(n-2)*f(X)

此总和等于:

1 + 4*f(X)*(1+2+3+...+n-2) = 1 + 4*f(X)*(n-2)*(n-1)/2 

但常数不会影响该功能的趋势=>结果是:

O(2*f(X)*(n-2)(n-1)) = O(f(X)*(n^2))
如果O(n^2)只是一个简单的操作(X),则

O(1)

P.S。

如果您不确定常数不会影响最终结果,请尝试计算:

          1 + 4*f(X)*(n-2)*(n-1)/2 
   lim  ---------------------------
n->infinite      f(X)*n^2

并且您将获得有限数字(这意味着分子和分母是相似的)。