以下函数的时间复杂度是多少?
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