大整数乘法——分治算法的时间复杂度

本文探讨了大整数乘法的分治算法,指出未经优化的时间复杂度为O(n^2),并介绍了一种通过减少乘法次数降低复杂度至O(n^1.59)的方法。分析表明,将大整数分为两段时,算法的时间复杂度最低,而随着段数增加,复杂度会上升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1.1原始的低效算法

  

  我们将n位(为方便讨论简化问题,我们假设n是2的幂)十进制整数(二进制也可以)X、Y都分为2段,每段的长度是n/2位。

 

  如果现在直接用递归或分治进行编程,其算法复杂度为: 

  其中:T(n)代表规模为n的问题,系数4表示问题缩小到T(n/2)时,包含四次乘法(上式中AC/AD/BC/BD四次)

这是在没有进行优化情况下的算法复杂度(注意,此处虽然用了分治思想,但分治并不会降低算法复杂度,反而因其需要使用栈,增加了算法的空间复杂度)。

  1.2高效的算法(运用了数学的小技巧)

  

  我们知道,大整数乘法的基本运算是“乘法”运算,我们可以通过减少乘法的次数来降低算法复杂度!

  从公式中可以发现,原来有四个基本乘积项:AC、AD、BC、BD,现在只有三个基本乘积项:(A-B)(C-D)、AC、BD。乘法运算的数量降低了,下面看看其复杂度变化:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值