递归方程+复杂度分析
大整数的乘法
背景介绍
设X和Y都是n位二进制整数,现在需要计算它们的乘积XY,如果使用小学的思路设计算法,那么需要n2次乘法和n-1次加法,效率太低,那么能够设计出一种算法能够提高效率?
方案一
将n位二进制整数X和Y都分为两段,每段的长度为n/2,如下图所示
此时, X = A 2 n / 2 + B X=A2^{n/2}+B X=A2n/2+B, Y = C 2 n / 2 + D Y=C2^{n/2}+D Y=C2n/2+D,XY的乘积就为:
X Y = ( A 2 n / 2 + B ) ( C 2 n / 2 + D ) = A C 2 n + ( A D + B C ) 2 n / 2 + B D XY=(A2^{n/2}+B)(C2^{n/2}+D)=AC2^n+(AD+BC)2^{n/2}+BD XY=(A2n/2+B)(C2n/2+D)=AC2n+(AD+BC)2n/2+BD,共需要4次2n/2位的乘法,3次长度不超过2n的加法,以及两次移位操作,所以可以得出对应递归方程如下:
T ( n ) = { O ( 1 ) n = 1 4 T ( n / 2 ) + O ( n ) n > 1 T(n)= \begin{cases} O(1)\quad\quad\quad\quad\quad\quad\quad{n=1}\\ 4T(n/2)+O(n)\quad\quad{n\gt1} \end{cases}