Files
advanced_algo/PolyMultiplication/ThreeDivideConcur.py
2020-03-25 22:08:20 -06:00

25 lines
600 B
Python

import numpy as np
def threeDivideConcur(n, P, Q):
PQ = np.zeros((2*n))
if n == 1:
PQ[0] = P[0] * Q[0]
return PQ
half = int(n/2)
PQ_LL = threeDivideConcur(half, P[0:half], Q[0:half])
PQ_HH = threeDivideConcur(half, P[half:], Q[half:])
P0 = [0] * half
Q0 = [0] * half
for i in range(half):
P0[i] = P[i] + P[i+half]
Q0[i] = Q[i] + Q[i+half]
S0 = threeDivideConcur(half, P0, Q0)
S0 = S0 - PQ_LL - PQ_HH
for i in range(0, n):
PQ[i] += PQ_LL[i]
PQ[i+half] += S0[i]
PQ[i+half] += PQ_HH[i]
return PQ