乘法


10

我一直在寻找在这里,我注意到两个乘法的最佳运行 -Bits数是Ø ñ 登录ň 2 Ø 日志* ñ ,但我可以很容易发现的算法,在运行Ø ñ 登录n ñØñ日志ñ2Ø日志ñØñ日志ñ

毕竟,我们知道如何在O n log n 运行时中将两个多项式相乘。但是多项式相乘与两个n位数字相乘相同。因此,我们有一种算法将O n log n )中的两个n位数字相乘。现在可能发生的唯一问题是进位,但是在每个阶段中,我们都可以在O n 时间内解决此问题,只需移动最右边的位及其左邻居,直到结束。也就是说,我们的运行时间应保持Ø ñ 日志ññØñ日志ñññØñ日志ñØñØñ日志ñ

那我做了一个新的(而且很明显)的发现吗?还是维基百科页面过时了?也许我有一些错误?


“我们知道”“ 在O n log n 运行时从阶乘两个多项式”的方式是什么?ñO(nlogn

Answers:


8

正如@DavidRicherby指出的那样,由于不同的复杂性度量混杂在一起而引起混乱。但是,让我详细说明一下。

通常,在研究用于任意环上的多项式乘法的算法时,人们会对算法使用的环中的算术运算数量感兴趣。特别地,给定一些(可交换的,整体的)环,和两个多项式˚F [R [ X ]小于度的Ñ,所述Schönhage-Strassen的算法需要ø Ñ 登录Ñ登录日志Ñ的乘法和加法的ř为了计算˚F [R [ X ][RFG[R[X]ñØñ日志ñ日志日志ñ[RFG[R[X]由大致邻接统一的第原始根到ř得到一些较大的环d - [R ,然后,使用快速傅立叶变换过d,计算在产物dñ[Rd[Rdd

如果你的戒指包含统一个根,那么这可以加速到Ø ñ 登录ñ 在操作[R通过直接快速傅立叶变换过[R 。更具体地讲,在žÇ,你可以做到这一点使用Ø ñ 日志ñ 环操作(忽略了一个事实,这将需要在复数精确的算法)。ñØñ日志ñ[R[RžCO(nlogn)

可以考虑的另一种措施是操作的位复杂度。这就是我们将两个长度为整数相乘的兴趣所在。在这里,原始运算是将两个数字相乘并加起来(带有进位)。因此,在将两个多项式乘以Z时,实际上需要考虑以下事实:在计算过程中出现的数字不能使用恒定数量的基本运算来相乘。这以及Zn > 2时没有第n个本元统一根这一事实阻止了您应用O n log n nZZnn>2O(nlogn)算法。你通过考虑克服这个与来自环系数Ž /2 Ñ + 1 ,由于产品多项式的系数将不超过此约束。存在(当Ñ是二的幂)时,有(同余类的)2作为Ñ统一的第根,以及通过递归调用对于系数乘法算法,可以实现共ø Ñ 登录Ñ log log n 原始(即位)操作。然后,这继续进行整数乘法。f,gž/2ñ+1个ñ2ñØñ日志ñ日志日志ñ

例如,一个很好地强调了环运算和原始运算之间差异的重要性的示例,请考虑两种用于评估多项式的​​方法:霍纳法和Estrin法。Horner的方法计算一个多项式在一些X Ž通过利用身份 ˚F X = ... ˚F Ñ X + ˚F ñ - 1X + ... + ... +F=一世=0ñF一世X一世Xž 而Estrin方法将 f分为两部分 H = n / 2 i = 1 f n / 2 + i X i L = n / 2 i = 0 f i X i, H包含度项 > ñ / 2大号度的条款ñ / 2(假设 ñ

FX=FñX+Fñ-1个X+++F0
F
H=一世=1个ñ/2Fñ/2+一世X一世
大号=一世=0ñ/2F一世X一世
H>ñ/2大号ñ/2ñ 为简单起见,是2的幂)。

FX

FX=HXXñ/2+大号X

ññ+日志ñ

ñ/2ñ/2Ωñ2ñØñØñ日志Cñ=ØñC>0


9

ñØñ日志ññØ2日志ññ日志ññØñ日志ñ


5
我认为不是问题。如果我们将数字视为“ x”为基数的多项式,例如2,那么通常我们可以在恒定时间内乘以零度多项式(小于基数的数)。我想这个问题是O(n * log n)算法使用FFT,而FFT算法内部可能会出现渐近更大的数字。
jkff 2014年
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.