欢迎使用CSDN-markdown编辑器
2017-06-27 15:01
141 查看
算发学习1:快速幂
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。快速幂的思想
利用2进制分析问题,例如3^13,其中幂数11可以换作2进制数1101,意味着10^1101 = 10^0001*10^0100*10^1000,通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果.快速幂方法:
代码块语法遵循标准markdown代码,例如:def Power1(self, base, exponent): S=1.0 ex=abs(exponent) if base==0.0: return "base Error!" else: while(ex): if(ex&1): S=S*base base=base**2 ex>>=1 if exponent>0: return S else: return 1/S
常规方法:
def Power(self, base, exponent): S=1.0 if exponent==0: pass elif exponent>0: for i in range(1,exponent+1): S=S*base elif exponent<0: for i in range(1,abs(exponent)+1): S=S*base S=1/S return S
Python 的幂函数:
def Power2(self, base, exponent): return base**exponent
执行:
f __name__=='__main__': s=Solution() t0=time.time()*1000 print s.Power(2,-10) t1=time.time()*1000 print 'power time is : '+str(t1-t0) t2=time.time()*1000 print s.Power1(2,-10) t3=time.time()*1000 print 'power1 time is : '+str(t3-t2) t4=time.time()*1000 print s.Power2(2,-10) t5=time.time()*1000 print 'power2 time is : '+str(t5-t4)
输出
0.0009765625 power time is : 0.590087890625 0.0009765625 power1 time is : 0.27294921875 0.0009765625 power2 time is : 0.72509765625
相关文章推荐
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器ss
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器