【算法题】快速幂

快速幂算法

顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。


11=(1011)_2,  结果为1* (a) * (a*a) * (a*a*a*a)

时间复杂度为O(n), 那么我们有没有更快的办法呢? 有的~就是下面要说的快速幂。
快速幂就是把指数进行一次log(N)级别的变换。11 = 2^3+2^1+2^0
那么我只需要算3^13^2还有3^8这样复杂度就降下来了。算3^1需要一次记为a,把a平方就是3^2记为b,把b平方就是3^4记为c,再平方就是3^8记为d,这样把a b d乘以之后就是结果了。这样速度就快起来了~

int pow4(int a,int b){
  int r=1,base=a;
  while(b){
    if(b&1) r*=base;
    base*=base;
    b>>=1;
  }
  return r;
}

进度:目前只看了快速幂,其他还待研究


二分幂,快速幂,矩阵快速幂,快速乘

https://blog.csdn.net/MosBest/article/details/69264953

引用原句 

在我就说下我对二进制的感想吧: 
我们在做很多”连续“的问题的时候都会用到二进制将他们离散简化 
1.多重背包问题 
2.树状数组 
3.状态压缩DP 
……………还有很多。。。究其根本还是那句话:化连续为离散。。很多时候我们并不是为了解决一个问题而使用二进制,更多是时候是为了优化而使用它。所以如果你想让你的程序更加能适应大数据的情况,那么学习学习二进制及其算法思想将会对你有很大帮助。

猜你喜欢

转载自blog.csdn.net/yifen4234/article/details/80281703