我正在尝试实现多项式乘法的分而治之算法.这是演讲笔记中给出的伪代码:
其中A,B是每个多项式的系数列表,n是问题的大小(度-1),a_l,b_1是感兴趣的系数的索引.
这是我尝试使用Python3实现它:
def poly_mult_dc_naive(A, B, n, a, b):
n = int(n)
a = int(a)
b = int(b)
C = [None] * int(2*n - 1)
if n == 1:
C[0] = A[a] * B[b]
return C[0]
C[0:n-1] = poly_mult_dc_naive(A, B, n//2, a, b)
C[n:2*n-1] = poly_mult_dc_naive(A, B, n//2, a + (n // 2), b + (n // 2))
W = poly_mult_dc_naive(A, B, n/2, a, b + (n // 2))
V = poly_mult_dc_naive(A, B, n/2, a + n/2, b)
C[n // 2:n + (n // 2) - 1] += W + V
return C
但是我得到了奇怪的结果.例如,让A = [1,2,3,4] B = [4,3,2,1]我得到:
[4,无,8,3,6,12,无,16,9,12,2,无,4,1,2,无,8,3,4,无,无]
正确答案是[4,11,20,30,20,11,4]
有人可以指出我出错的地方以及如何做到这一点?