如何解决Karatsuba算法的自己实现
大家好,我试图提出自己的Karatsuba乘法算法实现,其中,当一个数字是一位数字时,基本情况是微不足道的乘法。我的代码似乎无法给出正确的答案,我相信这与z1的计算方式有关,但我不太清楚,请帮助我。
import math
x = input()
y = input()
def suba(x,y):
if len(x) == 1 or len(y) == 1:
x = int(x)
y = int(y)
return x*y
else:
n = int(math.ceil((min(len(x),len(y)))/2))
h1 = x[0:n]
l1 = x[n:len(x)]
h2 = y[0:n]
l2 = y[n:len(y)]
z0 = suba(l1,l2)
z1 = suba(str(int(l1)+int(h1)),str(int(l2)+int(h2)))
z2 = suba(h1,h2)
return (z2*10**(n*2))+((z1-z2-z0)*10**(n))+z0
print(suba(x,y))
解决方法
问题出在拆分中。您需要以 low (右侧)部分的大小为 n 的方式进行拆分。这是必要的,因为 x 和 y 的 high 部分必须具有可比性:它们必须通过除以相同来提取为10的幂。
因此将拆分代码更改为此:
h1 = x[:-n]
l1 = x[-n:]
h2 = y[:-n]
l2 = y[-n:]
还请注意,不必为范围的开头指定0,也不必为范围的结尾指定长度,因为它们是默认值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。