根据评论进行编辑,可以
将计算的时间分解为计算所需的时间和执行。我假设用教科书方法将位数字乘以位数字需要精确的时间; 添加等是固定时间。结果,计算需要时间。f(n)=nn2f1(n)=n2nf1(n)mnmnn2log22(n)
假设我们使用二进制幂计算。二进制幂运算在计算两种运算:对当前乘积进行平方运算,然后根据的二进制扩展中的当前位是0还是1 ,将当前乘积乘以。 ,是的幂,因此二进制乘幂会反复对当前乘积求平方,直到得到答案为止。请注意,具有位,因此这样的平方是。我们将在下面进一步分析这种情况。f(n)f(n)nn2n2n2m′=⌈2log2(n)⌉m=m′−1
第一次平方花费时间,从而产生位乘积。第二个平方采用两个位数,并在时间内运行,从而产生位乘积。继续,第步骤花费次,并输出位乘积。该过程在第步停止;结果,这需要时间t1=log22(n)o1=2log2(n)o1t2=o21o2=2o1iti=4i−1log22noi=2ilog2(n)m
Texp=∑[1..m]ti=log22(n)∑[1..m]4i=4m−13log22n。
如果算上初始平方的成本,我们发现我们最多需要时间。
Texp+log22n
注意
- 我在计算中省略了一些楼层和天花板,希望它们不会对答案产生实质性影响。
- 我特意省略了基于的分析,而只提出了严格的精确上限。
O
- 上述推理也清楚地说明了为什么我之前的分析存在缺陷。该在一个快速和宽松的方式使用符号,它方便省略常数,这样,例如,奇迹般地变成了。
O∑tiO(logn)
- 始终可以通过FFT和其他方法来加快乘法速度。