大整数的乘法(递归方程+复杂度分析)

递归方程+复杂度分析

大整数的乘法

背景介绍

设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}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值