算法分析的一个小例子--大数乘法

x,y为两个长度为n位的整数,计算它们的积
X=A2^n/2+B ,Y=C2^n/2+D。这样,X和Y的乘积为:

XY=(A2^n/2+B)(C2^n/2+D)=AC2^n+(AD+CB)2^n/2+BD
4次n/2位整数的乘法(AC,AD,BC和BD),以及3次不超过n位的整数加法(式中的加号),此外还要做2次移位(分别对应于式中乘2n和乘2n/2)。所有这些加法和移位共用O(n)步运算
T(N)=4T(N/2)+ O(N) T(n)=O(n^2)

XY=AC2^n+[(A-B)(D-C)+AC+BD]2^n/2+BD
需做3次n/2位整数的乘法(AC,BD和(A-B)(D-C)),6次加、减法和2次移位

T(N)=3T(N/2)+ O(N) T(n)=O(n^log3)=O(n^1.59)
T(N)为长度为n的乘法运算,可变为3个长度为n/2的乘法运算, O(N)把3个长度为n/2的乘法运算结果组装起来的时间(加法和位移操作)
画递归树更容易看出时间复杂度
T(N)=AT(N/B)+ O(F(N))

T(N)=3T(N/2)+ O(N)

第k级子问题数为3^k,树的高度为logn,最后一级k=logn,子问题数为3^logn,工作量为O(3^logn)=O(n^log3)=O(n^1.59),因为每一级时间成本几何增加,所以最后一级就是整个算法的时间复杂度

注:
证明O(3^logn)=O(n^log3)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值