Q: given number x, and n>=0 compute x^n.
Naive Algorithm:
x*x*x*......*x=x^n Time:Θ(n)
Divide and Conquer Algorithm:
X^n=(X^2)^(n/2) if n is a even
X^n=X*(X^2)^[(n-1)/2] if n is an odd
Time: T(n)=T(n/2)+Θ(1)=Θ(lgn) Using Master Method(Case2)
Realization --- CPP:
namespace ImprovedAlg{
long double m_power(long double x,int n);
long double power(int x,int n){
if(n>=0){
return m_power(x,n);
}else{
return 1/m_power(x,-n);
}
}
//This problem be divide into 1 subproblem and the scale drop down to half.
//T(n)=T(n/2)+Theta(1) =>a=1,b=2 log2(1)=0 f(n)=Theta(n^0*(lgn)^0)=Theta(1) => case2 => T(n)=O(lgn)
long double m_power(long double x,int n){ //x^n
if(n==0)
return 1;
if(n==1)
return x;
if(n%2==0){ //n is even
//return m_power(x,n/2)*m_power(x,n/2); //recursively
return m_power(x*x,n/2); //recursively
}else{ //n is odd
//return m_power(x,(n-1)/2)*m_power(x,(n-1)/2)*x; //recursively
return m_power(x*x,(n-1)/2)*x; //recursively
}
}
}