您的位置:首页 > 其它

欢迎使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法