📜  幂次循环的时间复杂度

📅  最后修改于: 2021-05-08 19:00:36             🧑  作者: Mango

以下函数的时间复杂度是多少?

C
void fun(int n, int k)
{
    for (int i = 1; i <= n; i++)
    {
        int p = pow(i, k);
        for (int j = 1; j <= p; j++)
        {
            // Some O(1) work
        }
    }
}


以上函数的时间复杂度可写为1 k + 2 k + 3 k +…n1 k

让我们尝试一些示例:

k=1
Sum = 1 + 2 + 3 ... n 
    = n(n+1)/2 
    = n2/2 + n/2

k=2
Sum = 12 + 22 + 32 + ... n12.
    = n(n+1)(2n+1)/6
    = n3/3 + n2/2 + n/6

k=3
Sum = 13 + 23 + 33 + ... n13.
    = n2(n+1)2/4
    = n4/4 + n3/2 + n2/4     

通常,渐近值可以表示为(n k + 1 )/(k + 1)+Θ(n k )
如果n> = k,则时间复杂度将考虑为O((n k + 1 )/(k + 1)) ,如果n O( n k )