准备一、数学家高斯曾经发现虽然计算两个复数的乘积看似包含4次乘法:
( a + b i ) ( c + d i ) = a c − b d + ( a d + b c ) i (a+bi)(c+di)=ac-bd+(ad+bc)i (a+bi)(c+di)=ac−bd+(ad+bc)i
但是其实三次实数乘法就可已完成,因为我们需要的就是系数 a c , b d , ( a d + b c ) ac,bd,(ad+bc) ac,bd,(ad+bc)
( a d + b c ) = ( a + b ) ( c + d ) − a c − b d (ad+bc)=(a+b)(c+d)-ac-bd (ad+bc)=(a+b)(c+d)−ac−bd
虽然这这看起来似乎没有什么大不了的,但是大数乘法的比较快的算法的核心其实就在这个让乘法次数减少的式子里。
准备二、
算法导论里有对主定理的推导,用于判断一种算法的时间复杂度。但是公式比较复杂,《Algorithms》(中文翻译成算法概论)这本书里的分治算法这一章有对分治算法的主定理作了一个更加简单的总结:
主定理:如果对于常数a>0、b>1以及d>=0,有 T ( n ) = a T ( n / b ) + O ( n d ) T(n)=aT(n/b)+O(n^d) T(n)=aT(n/b)+O(nd)成立,则
对于证明,我简单的口述一下:我们将 T ( n ) = a T ( n / b ) + O ( n d ) T(n)=aT(n/b)+O(n^d) T(n)=aT(n/b)+O(n