(1)下面 SumPower 函数的时间复杂度为 ▁▁▁▁▁ 。
1.sumPower中for循环执行了n次,也就是说power函数被调用了n次
2.在power函数中for循环中的语句体的执行次数与t有关,t每次除以w,经过ln次过t会小于等于0,循环体中的语句执行了lbn次
3.时间复杂度为nlbn
double Power(double x, int n)
{
double y = 1.0, p = x;
int t = n;
for (t = n; t > 0; t /= 2)
{
if (t % 2)
{
y *= p;
}
p *= p;
}
return y;
}
double SumPower(double x, int n)
{
double y = 0.0;
int k;
for (k = 1; k <= n; ++k)
{
y += Power(x, n);
}
return y;
}
(2) 以下程序段的时间复杂度为( )。
int n;
cin >> n;
for(s=0, i=1; i<=100; i++)
s+=i;
循环体中的语句执行100次,是个常数与问题规模n无关,所以时间复杂度为常数阶O(1)
(3)下面 Power 函数的时间复杂度为 ▁▁▁▁▁ 。
double Power(double x, int n)
{
double y;
if (n > 0)
{
y = Power(x, n / 2);
y *= y;
if (n % 2)
{
y *= x;
}
}
else
{
y = 1.0;
}
return y;
}
此为递归函数,程序的执行次数与递归被调用的次数有关,递归执行次数与n有关,n每次都除以2,经过lbn次以后n==0,y=1
(4)程序段的时间复杂度为()。
i = 1; k = 0; n = 100;
do{
k = k + 10 * i;
i = i++;
}while(i != n)
循环执行次数与n有关,n为常数,所以时间复杂度为O(1)
(5)观察下面的算法:其时间复杂度为 ▁▁▁▁▁。
int foo(int n)
{
int i, j, s = 0;
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= n; j *= 2)
{
s += i * j;
}
}
return s;
}
外循环的执行次数为n次,内循环的执行次为为lbn,总的执行次数为nlbn