算发学习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