Karatsuba乘法的算法思路运用了递归的思想,贴上Stanford的Tim Roughgarden的课件。这里说说我遇到的代码实现的问题。
在coursera上面的算法课的作业题是用这个Karatsuba做两个64位整数相乘。
我最开始写的代码:
import numpy as np
def Karatsuba(x,y):
m=(len(str(x))//2)
a = x // (np.power(10, m))
b = x % np.power(10, m)
c = y // (np.power(10, m))
d = y % np.power(10, m)
if len(str(x))==1:
return x*y
else:
a_c = Karatsuba(a,c)
b_d = Karatsuba(b,d)
ad_bc = Karatsuba(a+b,c+d) - a_c - b_d
res = np.power(10,m*2) *a_c +np.power(10,m)*ad_bc + b_d
return res
当输入不太大的时候,例如8位或者16位整数