定义 $C=A\times B$ 满足 $C_i=\max_{j\lor k=i}(A_j+B_k)$。
约定 $\operatorname{concat}(A,B)$ 表示把 A,B 数组接起来,$\max(A,B)$ 表示 A,B 按位取 max。
考虑用类似 karatsuba 的搞法。
假设 A,B 长度都是 $2^n$,需要计算 $C=A\times B$,考虑按照下标的二进制最高位把 A,B,C 分成前后两半,即:
$$ \begin{aligned} A=\operatorname{concat}(A_0,A_1)\cr B=\operatorname{concat}(B_0,B_1)\cr C=\operatorname{concat}(C_0,C_1)\cr \end{aligned} $$则有:
$$ \begin{aligned} C_0&=A_0\times B_0\cr C_1&=\max(A_1\times B_0,A_0\times B_1,A_1\times B_1)\cr &=\max (A_1\times B_0,\max(A_0,A_1)\times B_1) \end{aligned} $$于是递归处理 3 个长度为 $2^{n-1}$ 的子问题即可。复杂度 $T(n)=3T(n-1)+O(2^n)=O(3^n)$。
|
|