递归X ^ N算法时间复杂度

时间:2015-10-05 18:50:37

标签: algorithm time-complexity

我有两个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)

是正确的吗?

1 个答案:

答案 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^kn/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)