分治思想的应用2
试题二:
题目非常简洁:试计算x 的n 次方。
也许你会想到直接利用pow函数 ,不过这样做就没有意义了 ,当然我们可以试用一个简单的循环来实现,或者试用简单的递归来轻松的
解决这道问题。不过今天我们要使用分治的思想来解决这道题目。我们不能忽略算法本身的效率,假如使用一个简单的递归,它的复杂度
将是指数级的,我们将用分治法来找到一个复杂度 lgn的方法
我们很容易得到公式 T (n) = T (n/2) + θ (1)
利用主定理可得到 T (n) = lg n 如果我们已经求得了x 的n/2次幂 ,就没必要再递归的求一次
所以上代码:
<span style="font-size:14px;">#include<iostream>
using namespace std;
double pow(double x,int n)
{
if(n==1)
{
return x;
}
if(n%2==0)
{
double num = pow(x,n/2);
return num*num;
}
else if(n%2==1)
{
double num = pow(x,n/2);
return x*num*num;
}
}
int main()
{
double number = 4.2;
int n = 4;
cout<<pow(number,n)<<endl;
return 0;
}</span>
可以看出使用分治的思想发是非常简洁的,而且效率更高,分治思想甚至在我们的超大规模集成电路上也有很广泛的应用的,大家有兴趣可以深入了解下哦。