一直以来,快速求幂屡屡出现在各种题目中(内置pow直接返回?),虽然关于python实现快速求幂可能有很多版本,大部分基于原始C语言版本的生硬的python版本,我也背过一本《高效算法》里的快速求幂,然而其趋向C过于严重,以至于过不了多久全然忘记,或者可操作性极差,需要反复翻阅,难得求职期间闲暇,故对于python版本的快速求正整数幂稍作研究。
《高效算法》版本:
def fast_exponentiation(a, b, q):
assert a >= 0 and b >= 0 and q >= 1
p = 0 # 只用于记录
p2 = 1 # 2^p
ap2 = a % q # a^(2^p)
result = 1
while b > 0:
if p2 & b > 0: # b由a^(2^p)拆分而来
b -= p2
result = (result * ap2) % q
p += 1
p2 *= 2
ap2 = (ap2 * ap2) % q
return result
看不懂不要问我,自己翻书去,在下也是难以记住,类C的Python算法真正做到了只是换了语法,估计改写成C都不用费多少力气
内置函数版本:
def pow(*args, **kwargs): # real signature unknown
"""
Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
Some types, such as ints, are able to use a more efficient algorithm when
invoked using

本文探讨了Python中快速求正整数幂的不同方法,包括《高效算法》书中类C版本、内置函数`pow()`以及作者通过装饰器实现的递归版本。通过对算法的时间复杂度和空间复杂度分析,作者指出Python应利用其高级特性和抽象思维解决此类问题,而提出的算法3在保持可读性的同时,实现了接近O(log n)的时间复杂度和较高的效率。
最低0.47元/天 解锁文章
6219

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



