问题: 快速求
暴力法(累乘法):
long pow_(int a,int b){
long long result=1;
for(long long i=1;i<=b;++i){
result*=a;
}
return result;
}
算法时间复杂度:O(b),数据越大,消耗时间越多,而且容易超出long long的范围,无法满足太大的运算。
优化算法——快速幂算法:
我们考虑一下怎么实现的:
=
=
=
×9=
×9。
我们发现:1.如果指数是偶数,直接将底数平方,指数除以2。
2.如果指数是奇数,底数平方,指数整除2,再乘以底数。
long long Fast_Pow(long long a, long long b) {
long long result = 1;
while (b) {
if (b & 1) { /*位运算可以提升性能,相当于b/%2==1,判断是否为奇数*/
result *= a; /*奇数的二进制最后一位肯定是1*/
}
a *= a; /*此处奇数偶数有相同步骤,合在一起*/
b>>=1; /*位运算,相当于b=b/2*/
}
return result;
}
时间复杂度是:级别,可以看到算法的时间复杂度有了很大提升。
本文详细介绍了快速幂算法,对比了暴力求解的局限性,如时间复杂度过高和数值溢出问题。通过优化算法,将时间复杂度降低到O(log b),显著提升了计算效率。快速幂算法利用位运算,巧妙地处理了指数为奇数和偶数的情况,避免了重复计算,适用于大规模数值的快速运算。
1842

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



