Karatsuba算法
的
天真的乘法算法
小学里通常教的是简单的数运算方法。
这是简单的乘法算法
把每个数字分成两半,高的部分
而低位 :
把这两个数字相乘:
这些公式描述了上图中发生的事情——我们熟悉的小学乘法方法。这有四种乘法:
HyHbn, xHyl)b2n, xlyH)b2n, lyl,哪个的运行时间是 (n2).
让我们用这个方法来乘以以10为底的数
23.4而且 765:
Karatsuba算法
Karatsuba算法将子问题的数量减少到三个,最后计算两个的乘积 把两个
下面是Karatsuba法如何计算2的乘法
创建以下三个子问题
表示数和的高位 表示较低的位: [1]一个>
这只需要三次乘法,并且有<一个target="_blank" rel="nofollow" href="//www.parkandroid.com/wiki/recurrence-relations/">递归式一个>
使用Karatsuba方法进行以下乘法运算:
23.4×43.21. [1]一个> 首先,确定第1步的值, 1-这将包含高位 而且 自 而且 有四个比特,最左边的两个是高比特。 .
包含自之后每个数字的较低位
而且 有四个位,这个问题中较低的位是最右边的两个位。
我们有
1一个2d2e2=(46×64)−一个1−d1=4×6=24=6×4=24=(4+6)(6+4)−一个2−d2=52.自 y=一个rn+er2n+d,
Karatsuba算法的实现
下面是10进制数的Karatsuba算法的Python实现。
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
Karatsuba的复杂性
为了分析Karatsuba算法的复杂性,考虑算法执行的乘法次数作为的函数
这就解决了Karatsuba所需的乘法问题——现在考虑加减运算。有
使用<一个href="//www.parkandroid.com/wiki/master-theorem/" class="wiki_link" title="主定理gydF4y2Ba" target="_blank">主定理一个>得到Karatsuba算法的运行时间为
的<一个href="//www.parkandroid.com/wiki/schonhage-strassen-algorithm/" class="wiki_link" title="Schonhage-Strassen算法gydF4y2Ba" target="_blank">Schonhage-Strassen算法一个>和<一个href="//www.parkandroid.com/wiki/toom-cook-algorithm/" class="wiki_link" title="Toom-Cook算法gydF4y2Ba" target="_blank">Toom-Cook算法一个>是其他流行的整数乘法算法。图姆-库克算法是运行的Karatsuba算法更快、更广义的版本
另请参阅
参考文献
- Demaine, E, Indyk, P, & Kellis, M。
Karatsuba的算法 .检索于2016年5月29日<一个href="http://courses.csail.mit.edu/6.006/spring11/exams/notes3-karatsuba">http://courses.csail.mit.edu/6.006/spring11/exams/notes3-karatsuba一个> - Babai, L。
分而治之:Karatsuba-Ofman算法 .检索于2016年5月30日<一个href="http://people.cs.uchicago.edu/~laci/HANDOUTS/karatsuba.pdf">http://people.cs.uchicago.edu/~laci/HANDOUTS/karatsuba.pdf一个> - ,。
Toom-Cook乘法 .检索于2016年5月30日<一个href="https://en.wikipedia.org/wiki/Toom%E2%80%93Cook_multiplication">https://en.wikipedia.org/wiki/Toom%E2%80%93Cook_multiplication一个> - ,。
Schonhage-Strassen算法 .检索于2016年5月30日<一个href="https://en.wikipedia.org/wiki/Sch%C3%B6nhage%E2%80%93Strassen_algorithm">https://en.wikipedia.org/wiki/Sch%C3%B6nhage%E2%80%93Strassen_algorithm一个>