Karatsuba算法
的
天真的乘法算法
小学里经常教用简单的方法计算多个数字。
这是一个简单的乘法算法
把每个数分成两半,高的那位
低比特 :
把这两个数相乘:
这些公式描述了上图中所发生的事情——熟悉的小学乘法。它有四个乘法:
HyHbn, xHyl)b2n, xlyH)b2n, lyl,哪个的运行时间是 (n2).
让我们用这种方法来乘以10进制的数字
23.4而且 765:
Karatsuba算法
Karatsuba算法将子问题的数量减少到三个,并最终计算两个的乘积 把两个
下面是Karatsuba乘法的原理
在其中创建以下三个子问题
表示数字和的高位 表示低位: [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一个>