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

Algorithm 包含嵌套循环的代码的时间复杂度,algorithm,time-complexity,pseudocode,Algorithm,Time Complexity,Pseudocode,对于这个伪代码,我必须根据N计算一个函数f:N->N。我第一次做这样的事情,所以我甚至不知道我的方法是否正确。在第一行,我有一个恒定的时间。while循环运行n-1次+n次比较,n-1次恒定时间递减。第一个for循环运行n-i+1次。第二个for循环运行3n-3i+1次。 我想这就是公式:fn=1+n-1+n+n-1*n-I+1+3n-3i+1,这就是fn=12n^2-12ni-2n+8i-3 但现在我有了n和I变量?如何去掉I?让我们假设to n意味着最后一个值是n-1,就时间复杂度而言,这并

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


但现在我有了n和I变量?如何去掉I?

让我们假设to n意味着最后一个值是n-1,就时间复杂度而言,这并不重要-请参见最终解释

让我们假设fX=运行X的时间复杂度

总时间为:

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
这个总和等于:

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 
如果X只是一个简单的操作,那么它在^2上

附言:

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

O(2*f(X)*(n-2)(n-1)) = O(f(X)*(n^2))

你会得到一个有限数,这意味着分子和分母是相似的

我认为这可能更适合于?内部循环在*fx上,其中fx是执行x的复杂性。外部循环在其上:在^2*fxOn*fx上?你能解释一下,你是怎么得出这个结论的吗?因为我有两个for循环。那么i呢?你有两个内部for循环,每个循环在*fx:n次迭代中运行,每个迭代需要的功是x:fx的函数。由于两个内部for循环具有相同的复杂性,我们将它们相加为On*fx,而由于外部循环运行n次,我们得到的总数为:`On^2*fx
          1 + 4*f(X)*(n-2)*(n-1)/2 
   lim  ---------------------------
n->infinite      f(X)*n^2