计算复杂度


Answers:


12

通过使用快速傅立叶变换,可以在时间(其中波浪号表示我们忽略了多对数因子)上完成位数字的乘法。通过重复平方,我们可以使用乘法计算,并且每个乘法都不会包含大于,后者大约具有位。因此,所需的总时间为。kO~(k)nn2O(logn)nn2n2log2nO~(n2(logn)2)=O~(n2)


3

根据评论进行编辑,可以 将计算的时间分解为计算所需的时间和执行。我假设用教科书方法将位数字乘以位数字需要精确的时间; 添加等是固定时间。结果,计算需要时间。f(n)=nn2f1(n)=n2nf1(n)mnmnn2log22(n)

假设我们使用二进制幂计算。二进制幂运算在计算两种运算:对当前乘积进行平方运算,然后根据的二进制扩展中的当前位是0还是1 ,将当前乘积乘以。 ,是的幂,因此二进制乘幂会反复对当前乘积求平方,直到得到答案为止。请注意,具有位,因此这样的平方是。我们将在下面进一步分析这种情况。f(n)f(n)nn2n2n2m=2log2(n)m=m1

第一次平方花费时间,从而产生位乘积。第二个平方采用两个位数,并在时间内运行,从而产生位乘积。继续,第步骤花费次,并输出位乘积。该过程在第步停止;结果,这需要时间t1=log22(n)o1=2log2(n)o1t2=o12o2=2o1iti=4i1log22noi=2ilog2(n)m

Texp=[1..m]ti=log22(n)[1..m]4i=4m13log22n

如果算上初始平方的成本,我们发现我们最多需要时间。

Texp+log22n

注意

  • 我在计算中省略了一些楼层和天花板,希望它们不会对答案产生实质性影响。
  • 我特意省略了基于的分析,而只提出了严格的精确上限。 O
  • 上述推理也清楚地说明了为什么我之前的分析存在缺陷。该在一个快速和宽松的方式使用符号,它方便省略常数,这样,例如,奇迹般地变成了。 OtiO(logn)
  • 始终可以通过FFT和其他方法来加快乘法速度。

1
您如何计算复杂度?O(1)n2

4
我要说的是,两个位数字的乘积需要时间而不是时间,您还需要算出二进制乘幂的成本。nO(logn)O(1)
Mark Dominus

2
请注意,最终结果具有位。在时间中很难计算位。n2log2nn2log2nO(logn)

公平点,我会注意
PKG

1
@ThomasAndrews:这取决于机器和成本模型。假设RAM模型的添加成本相当高,这并不稀奇。
拉斐尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.