分治思想的应用2

                                        分治思想的应用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>

 

可以看出使用分治的思想发是非常简洁的,而且效率更高,分治思想甚至在我们的超大规模集成电路上也有很广泛的应用的,大家有兴趣可以深入了解下哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值