该算法求某个数的n次方的时间复杂度只有logN,我们平时使用的循环求时间复杂度为o(n)
int power(int x,int n)
{
int m=0;
m=n;
int t=1;
while(m>0)
{
m/=2;
t*=2;
}
m=n;
int y=1;
while(t>1)
{
t/=2;
y*=y;
if (m>=t)
{
y*=x;
m-=t;
}
}
return y;
}原理
一般的对于 a (2x + b) = a2x * a b
所以就有
(b = 0时 ) : a 2x + b = (ax)2 ;
(b = 1时): a 2x + b = (a x)2 * a ;
对于 an ,先把 n的二进制表示写出,那么有
an = a (n1 n2 n3 n4 ..)(2) = …
从左到右就可以如下表(n = 15的时候 1111)
n的二进制位 | 1 | 1 | 1 | 1 |
累乘 | a | a2 * a = a3 | (a3)2 *a= a7 | (a7)2 * a = a15 |
本文介绍了一种高效计算某个数的n次幂的方法,其时间复杂度仅为logN,远低于传统循环方法的O(n)。通过将指数转换为二进制形式,并利用位运算和递归思想,该算法能够在较少的操作次数下完成计算任务。
168万+

被折叠的 条评论
为什么被折叠?



