我有两个C程序
其中输入N应为任何整数2 ^ n:n> = 1
一个是 -
int power(int x,int n)
{
if(n==2)
return x*x;
else
return power(x,n/2)*power(x,n/2);
}
int main()
{
int x=6;
int n=8;
printf("%d",power(x,n));
getch();
}
另一个是 -
int power(int x,int n)
{
if(n==2)
return x*x;
else
{
int result=power(x,n/2);
return result*result;
}
}
int main()
{
int x=6;
int n=8;
printf("%d",power(x,n));
getch();
}
对于第一次复杂功能将是 -
T(n)=2T(n/2)+c
因此,我们将获得O(log n)
对于最后一个,它将是 -
T(n)=T(n/2)+c
因此,我们将获得O(log n)
是正确的吗?
答案 0 :(得分:1)
对于你实际拥有的第一个关系
T(n) = 2 T(n/2)+c = 2^2*T(n/2^2) + 2c+c = ...
= 2^(k-1)*T(n/2^(k-1)) + (k-1)*c+(k-2)*c+...+c =
= 2^(k-1)*T(2) + (k-1)*k*c/2 = n/2 + c*(log n-1)(log n)/2 = O(n)
因为你有n=2^k
而n/2
支配c*(log n)^2
(因为n
转向无穷n/2
变得远大于c*(log n)^2
)
对于第二个你是对的:
T(n) = 2*T(n/2)+c = T(n/2^2) + 2c = ... = T(n/2^(k-1)) + (k-1)c = T(2)+(k-1)*c=
= 1 + c*(logn-1) = O(log n)