fbpx
Wikipedia

Toom–Cook multiplication

Toom–Cook, sometimes known as Toom-3, named after Andrei Toom, who introduced the new algorithm with its low complexity, and Stephen Cook, who cleaned the description of it, is a multiplication algorithm for large integers.

Given two large integers, a and b, Toom–Cook splits up a and b into k smaller parts each of length l, and performs operations on the parts. As k grows, one may combine many of the multiplication sub-operations, thus reducing the overall computational complexity of the algorithm. The multiplication sub-operations can then be computed recursively using Toom–Cook multiplication again, and so on. Although the terms "Toom-3" and "Toom–Cook" are sometimes incorrectly used interchangeably, Toom-3 is only a single instance of the Toom–Cook algorithm, where k = 3.

Toom-3 reduces nine multiplications to five, and runs in Θ(nlog(5)/log(3)) ≈ Θ(n1.46). In general, Toom-k runs in Θ(c(k) ne), where e = log(2k − 1) / log(k), ne is the time spent on sub-multiplications, and c is the time spent on additions and multiplication by small constants.[1] The Karatsuba algorithm is equivalent to Toom-2, where the number is split into two smaller ones. It reduces four multiplications to three and so operates at Θ(nlog(3)/log(2)) ≈ Θ(n1.58). Ordinary long multiplication is equivalent to Toom-1, with complexity Θ(n2).

Although the exponent e can be set arbitrarily close to 1 by increasing k, the constant term in the function grows very rapidly.[1][2] The growth rate for mixed-level Toom–Cook schemes was still an open research problem in 2005.[3] An implementation described by Donald Knuth achieves the time complexity Θ(n 22 log n log n).[4]

Due to its overhead, Toom–Cook is slower than long multiplication with small numbers, and it is therefore typically used for intermediate-size multiplications, before the asymptotically faster Schönhage–Strassen algorithm (with complexity Θ(n log n log log n)) becomes practical.

Toom first described this algorithm in 1963, and Cook published an improved (asymptotically equivalent) algorithm in his PhD thesis in 1966.[5]

Details edit

This section discusses exactly how to perform Toom-k for any given value of k, and is a simplification of a description of Toom–Cook polynomial multiplication described by Marco Bodrato.[6] The algorithm has five main steps:

  1. Splitting
  2. Evaluation
  3. Pointwise multiplication
  4. Interpolation
  5. Recomposition

In a typical large integer implementation, each integer is represented as a sequence of digits in positional notation, with the base or radix set to some (typically large) value b; for this example we use b = 10000, so that each digit corresponds to a group of four decimal digits (in a computer implementation, b would typically be a power of 2 instead). Say the two integers being multiplied are:

m = 12 3456 7890 1234 5678 9012
n = 9 8765 4321 9876 5432 1098.

These are much smaller than would normally be processed with Toom–Cook (grade-school multiplication would be faster) but they will serve to illustrate the algorithm.

Splitting edit

In Toom-k, we want to split the factors into k parts.

The first step is to select the base B = bi, such that the number of digits of both m and n in base B is at most k (e.g., 3 in Toom-3). A typical choice for i is given by:

 

In our example we'll be doing Toom-3, so we choose B = b2 = 108. We then separate m and n into their base B digits mi, ni:

 

We then use these digits as coefficients in degree-(k − 1) polynomials p and q, with the property that p(B) = m and q(B) = n:

 
 

The purpose of defining these polynomials is that if we can compute their product r(x) = p(x)q(x), our answer will be r(B) = m × n.

In the case where the numbers being multiplied are of different sizes, it's useful to use different values of k for m and n, which we'll call km and kn. For example, the algorithm "Toom-2.5" refers to Toom–Cook with km = 3 and kn = 2. In this case the i in B = bi is typically chosen by:

 

Evaluation edit

The Toom–Cook approach to computing the polynomial product p(x)q(x) is a commonly used one. Note that a polynomial of degree d is uniquely determined by d + 1 points (for example, a line - polynomial of degree one is specified by two points). The idea is to evaluate p(·) and q(·) at various points. Then multiply their values at these points to get points on the product polynomial. Finally interpolate to find its coefficients.

Since deg(pq) = deg(p) + deg(q), we will need deg(p) + deg(q) + 1 = km + kn − 1 points to determine the final result. Call this d. In the case of Toom-3, d = 5. The algorithm will work no matter what points are chosen (with a few small exceptions, see matrix invertibility requirement in Interpolation), but in the interest of simplifying the algorithm it's better to choose small integer values like 0, 1, −1, and −2.

One unusual point value that is frequently used is infinity, written ∞ or 1/0. To "evaluate" a polynomial p at infinity actually means to take the limit of p(x)/xdeg p as x goes to infinity. Consequently, p(∞) is always the value of its highest-degree coefficient (in the example above coefficient m2).

In our Toom-3 example, we will use the points 0, 1, −1, −2, and ∞. These choices simplify evaluation, producing the formulas:

 

and analogously for q. In our example, the values we get are:

p(0) = m0 = 56789012 = 56789012
p(1) = m0 + m1 + m2 = 56789012 + 78901234 + 123456 = 135813702
p(−1) = m0m1 + m2 = 56789012 − 78901234 + 123456 = −21988766
p(−2) = m0 − 2m1 + 4m2 = 56789012 − 2 × 78901234 + 4 × 123456 = −100519632
p(∞) = m2 = 123456 = 123456
q(0) = n0 = 54321098 = 54321098
q(1) = n0 + n1 + n2 = 54321098 + 43219876 + 98765 = 97639739
q(−1) = n0n1 + n2 = 54321098 − 43219876 + 98765 = 11199987
q(−2) = n0 − 2n1 + 4n2 = 54321098 − 2 × 43219876 + 4 × 98765 = −31723594
q(∞) = n2 = 98765 = 98765.

As shown, these values may be negative.

For the purpose of later explanation, it will be useful to view this evaluation process as a matrix-vector multiplication, where each row of the matrix contains powers of one of the evaluation points, and the vector contains the coefficients of the polynomial:

 

The dimensions of the matrix are d by km for p and d by kn for q. The row for infinity is always all zero except for a 1 in the last column.

Faster evaluation edit

Multipoint evaluation can be obtained faster than with the above formulas. The number of elementary operations (addition/subtraction) can be reduced. The sequence given by Bodrato[6] for Toom-3, executed here over the first operand (polynomial p) of the running example is the following:

p0 m0 + m2 = 56789012 + 123456 = 56912468
p(0) = m0 = 56789012 = 56789012
p(1) = p0 + m1 = 56912468 + 78901234 = 135813702
p(−1) = p0m1 = 56912468 − 78901234 = −21988766
p(−2) = (p(−1) + m2) × 2 − m0 = (− 21988766 + 123456 ) × 2 − 56789012 = − 100519632
p(∞) = m2 = 123456 = 123456.

This sequence requires five addition/subtraction operations, one less than the straightforward evaluation. Moreover the multiplication by 4 in the calculation of p(−2) was saved.

Pointwise multiplication edit

Unlike multiplying the polynomials p(·) and q(·), multiplying the evaluated values p(a) and q(a) just involves multiplying integers — a smaller instance of the original problem. We recursively invoke our multiplication procedure to multiply each pair of evaluated points. In practical implementations, as the operands become smaller, the algorithm will switch to schoolbook long multiplication. Letting r be the product polynomial, in our example we have:

r(0) = p(0)q(0) = 56789012 × 54321098 = 3084841486175176
r(1) = p(1)q(1) = 135813702 × 97639739 = 13260814415903778
r(−1) = p(−1)q(−1) = −21988766 × 11199987 = −246273893346042
r(−2) = p(−2)q(−2) = −100519632 × −31723594 = 3188843994597408
r(∞) = p(∞)q(∞) = 123456 × 98765 = 12193131840.

As shown, these can also be negative. For large enough numbers, this is the most expensive step, the only step that is not linear in the sizes of m and n.

Interpolation edit

This is the most complex step, the reverse of the evaluation step: given our d points on the product polynomial r(·), we need to determine its coefficients. In other words, we want to solve this matrix equation for the vector on the right-hand side:

 

This matrix is constructed the same way as the one in the evaluation step, except that it's d × d. We could solve this equation with a technique like Gaussian elimination, but this is too expensive. Instead, we use the fact that, provided the evaluation points were chosen suitably, this matrix is invertible (see also Vandermonde matrix), and so:

 

All that remains is to compute this matrix-vector product. Although the matrix contains fractions, the resulting coefficients will be integers — so this can all be done with integer arithmetic, just additions, subtractions, and multiplication/division by small constants. A difficult design challenge in Toom–Cook is to find an efficient sequence of operations to compute this product; one sequence given by Bodrato[6] for Toom-3 is the following, executed here over the running example:

r0 r(0) = 3084841486175176
r4 r(∞) = 12193131840
r3 (r(−2) − r(1))/3 = (3188843994597408 − 13260814415903778)/3
= −3357323473768790
r1 (r(1) − r(−1))/2 = (13260814415903778 − (−246273893346042))/2
= 6753544154624910
r2 r(−1) − r(0) = −246273893346042 − 3084841486175176
= −3331115379521218
r3 (r2r3)/2 + 2r(∞) = (−3331115379521218 − (−3357323473768790))/2 + 2 × 12193131840
= 13128433387466
r2 r2 + r1r4 = −3331115379521218 + 6753544154624910 − 12193131840
= 3422416581971852
r1 r1r3 = 6753544154624910 − 13128433387466
= 6740415721237444.

We now know our product polynomial r:

 

If we were using different km, kn, or evaluation points, the matrix and so our interpolation strategy would change; but it does not depend on the inputs and so can be hard-coded for any given set of parameters.

Recomposition edit

Finally, we evaluate r(B) to obtain our final answer. This is straightforward since B is a power of b and so the multiplications by powers of B are all shifts by a whole number of digits in base b. In the running example b = 104 and B = b2 = 108.

3084 8414 8617 5176
6740 4157 2123 7444
3422 4165 8197 1852
13 1284 3338 7466
+ 121 9313 1840

121 9326 3124 6761 1632 4937 6009 5208 5858 8617 5176

And this is in fact the product of 1234567890123456789012 and 987654321987654321098.

Interpolation matrices for various k edit

Here we give common interpolation matrices for a few different common small values of km and kn.

Toom-1 edit

Toom-1 (km = kn = 1) requires 1 evaluation point, here chosen to be 0. It degenerates to long multiplication, with an interpolation matrix of the identity matrix:

 

Toom-1.5 edit

Toom-1.5 (km = 2, kn = 1) requires 2 evaluation points, here chosen to be 0 and ∞. Its interpolation matrix is then the identity matrix:

 

This also degenerates to long multiplication: both coefficients of one factor are multipled by the sole coefficient of the other factor.

Toom-2 edit

Toom-2 (km = 2, kn = 2) requires 3 evaluation points, here chosen to be 0, 1, and ∞. It is the same as Karatsuba multiplication, with an interpolation matrix of:

 

Toom-2.5 edit

Toom-2.5 (km = 3, kn = 2) requires 4 evaluation points, here chosen to be 0, 1, −1, and ∞. It then has an interpolation matrix of:

 

Notes edit

  1. ^ a b Knuth, p. 296
  2. ^ Crandall & Pomerance, p. 474
  3. ^ Crandall & Pomerance, p. 536
  4. ^ Knuth, p. 302
  5. ^ Positive Results, chapter III of Stephen A. Cook: On the Minimum Computation Time of Functions.
  6. ^ a b c Marco Bodrato. Towards Optimal Toom–Cook Multiplication for Univariate and Multivariate Polynomials in Characteristic 2 and 0. In WAIFI'07 proceedings, volume 4547 of LNCS, pages 116–133. June 21–22, 2007. author website

References edit

  • D. Knuth. The Art of Computer Programming, Volume 2. Third Edition, Addison-Wesley, 1997. Section 4.3.3.A: Digital methods, pg.294.
  • R. Crandall & C. Pomerance. Prime Numbers – A Computational Perspective. Second Edition, Springer, 2005. Section 9.5.1: Karatsuba and Toom–Cook methods, pg.473.
  • Bodrato, Marco (2007). "Towards optimal Toom–Cook multiplication for univariate and multivariate polynomials in characteristic 2 and 0". In Carlet, Claude; Sunar, Berk (eds.). Arithmetic of Finite Fields, First International Workshop, WAIFI 2007, Madrid, Spain, June 21–22, 2007, Proceedings. Lecture Notes in Computer Science. Vol. 4547. Springer. pp. 116–133. doi:10.1007/978-3-540-73074-3_10.
  • Bodrato, Marco (August 8, 2011). "Optimal Toom-Cook Polynomial Multiplication / Toom Cook convolution, implementation for polynomials". Retrieved 22 September 2023.

External links edit

  • Toom–Cook 3-way multiplication from GMP documentation: "Toom 3-Way Multiplication". GNU MP multiple precision arithmetic library (version 6.3.0) manual. Free Software Foundation, Inc. 30 July 2023 [Copyright 1991, 1993-2016, 2018-2020].

toom, cook, multiplication, toom, cook, sometimes, known, toom, named, after, andrei, toom, introduced, algorithm, with, complexity, stephen, cook, cleaned, description, multiplication, algorithm, large, integers, given, large, integers, toom, cook, splits, in. Toom Cook sometimes known as Toom 3 named after Andrei Toom who introduced the new algorithm with its low complexity and Stephen Cook who cleaned the description of it is a multiplication algorithm for large integers Given two large integers a and b Toom Cook splits up a and b into k smaller parts each of length l and performs operations on the parts As k grows one may combine many of the multiplication sub operations thus reducing the overall computational complexity of the algorithm The multiplication sub operations can then be computed recursively using Toom Cook multiplication again and so on Although the terms Toom 3 and Toom Cook are sometimes incorrectly used interchangeably Toom 3 is only a single instance of the Toom Cook algorithm where k 3 Toom 3 reduces nine multiplications to five and runs in 8 nlog 5 log 3 8 n1 46 In general Toom k runs in 8 c k ne where e log 2k 1 log k ne is the time spent on sub multiplications and c is the time spent on additions and multiplication by small constants 1 The Karatsuba algorithm is equivalent to Toom 2 where the number is split into two smaller ones It reduces four multiplications to three and so operates at 8 nlog 3 log 2 8 n1 58 Ordinary long multiplication is equivalent to Toom 1 with complexity 8 n2 Although the exponent e can be set arbitrarily close to 1 by increasing k the constant term in the function grows very rapidly 1 2 The growth rate for mixed level Toom Cook schemes was still an open research problem in 2005 3 An implementation described by Donald Knuth achieves the time complexity 8 n 2 2 log n log n 4 Due to its overhead Toom Cook is slower than long multiplication with small numbers and it is therefore typically used for intermediate size multiplications before the asymptotically faster Schonhage Strassen algorithm with complexity 8 n log n log log n becomes practical Toom first described this algorithm in 1963 and Cook published an improved asymptotically equivalent algorithm in his PhD thesis in 1966 5 Contents 1 Details 1 1 Splitting 1 2 Evaluation 1 2 1 Faster evaluation 1 3 Pointwise multiplication 1 4 Interpolation 1 5 Recomposition 2 Interpolation matrices for various k 2 1 Toom 1 2 2 Toom 1 5 2 3 Toom 2 2 4 Toom 2 5 3 Notes 4 References 5 External linksDetails editThis section discusses exactly how to perform Toom k for any given value of k and is a simplification of a description of Toom Cook polynomial multiplication described by Marco Bodrato 6 The algorithm has five main steps Splitting Evaluation Pointwise multiplication Interpolation Recomposition In a typical large integer implementation each integer is represented as a sequence of digits in positional notation with the base or radix set to some typically large value b for this example we use b 10000 so that each digit corresponds to a group of four decimal digits in a computer implementation b would typically be a power of 2 instead Say the two integers being multiplied are m 12 3456 7890 1234 5678 9012 n 9 8765 4321 9876 5432 1098 These are much smaller than would normally be processed with Toom Cook grade school multiplication would be faster but they will serve to illustrate the algorithm Splitting edit In Toom k we want to split the factors into k parts The first step is to select the base B bi such that the number of digits of both m and n in base B is at most k e g 3 in Toom 3 A typical choice for i is given by i max log b m k log b n k 1 displaystyle i max left left lfloor frac left lfloor log b m right rfloor k right rfloor left lfloor frac left lfloor log b n right rfloor k right rfloor right 1 nbsp In our example we ll be doing Toom 3 so we choose B b2 108 We then separate m and n into their base B digits mi ni m 2 123456 m 1 78901234 m 0 56789012 n 2 98765 n 1 43219876 n 0 54321098 displaystyle begin aligned m 2 amp 123456 m 1 amp 78901234 m 0 amp 56789012 n 2 amp 98765 n 1 amp 43219876 n 0 amp 54321098 end aligned nbsp We then use these digits as coefficients in degree k 1 polynomials p and q with the property that p B m and q B n p x m 2 x 2 m 1 x m 0 123456 x 2 78901234 x 56789012 displaystyle p x m 2 x 2 m 1 x m 0 123456x 2 78901234x 56789012 nbsp q x n 2 x 2 n 1 x n 0 98765 x 2 43219876 x 54321098 displaystyle q x n 2 x 2 n 1 x n 0 98765x 2 43219876x 54321098 nbsp The purpose of defining these polynomials is that if we can compute their product r x p x q x our answer will be r B m n In the case where the numbers being multiplied are of different sizes it s useful to use different values of k for m and n which we ll call km and kn For example the algorithm Toom 2 5 refers to Toom Cook with km 3 and kn 2 In this case the i in B bi is typically chosen by i max log b m k m log b n k n displaystyle i max left left lfloor frac left lceil log b m right rceil k m right rfloor left lfloor frac left lceil log b n right rceil k n right rfloor right nbsp Evaluation edit The Toom Cook approach to computing the polynomial product p x q x is a commonly used one Note that a polynomial of degree d is uniquely determined by d 1 points for example a line polynomial of degree one is specified by two points The idea is to evaluate p and q at various points Then multiply their values at these points to get points on the product polynomial Finally interpolate to find its coefficients Since deg pq deg p deg q we will need deg p deg q 1 km kn 1 points to determine the final result Call this d In the case of Toom 3 d 5 The algorithm will work no matter what points are chosen with a few small exceptions see matrix invertibility requirement in Interpolation but in the interest of simplifying the algorithm it s better to choose small integer values like 0 1 1 and 2 One unusual point value that is frequently used is infinity written or 1 0 To evaluate a polynomial p at infinity actually means to take the limit of p x xdeg p as x goes to infinity Consequently p is always the value of its highest degree coefficient in the example above coefficient m2 In our Toom 3 example we will use the points 0 1 1 2 and These choices simplify evaluation producing the formulas p 0 m 0 m 1 0 m 2 0 2 m 0 p 1 m 0 m 1 1 m 2 1 2 m 0 m 1 m 2 p 1 m 0 m 1 1 m 2 1 2 m 0 m 1 m 2 p 2 m 0 m 1 2 m 2 2 2 m 0 2 m 1 4 m 2 p m 2 displaystyle begin array lrlrl p 0 amp amp m 0 m 1 0 m 2 0 2 amp amp m 0 p 1 amp amp m 0 m 1 1 m 2 1 2 amp amp m 0 m 1 m 2 p 1 amp amp m 0 m 1 1 m 2 1 2 amp amp m 0 m 1 m 2 p 2 amp amp m 0 m 1 2 m 2 2 2 amp amp m 0 2m 1 4m 2 p infty amp amp m 2 amp amp end array nbsp and analogously for q In our example the values we get are p 0 m0 56789012 56789012 p 1 m0 m1 m2 56789012 78901234 123456 135813702 p 1 m0 m1 m2 56789012 78901234 123456 21988766 p 2 m0 2m1 4m2 56789012 2 78901234 4 123456 100519632 p m2 123456 123456 q 0 n0 54321098 54321098 q 1 n0 n1 n2 54321098 43219876 98765 97639739 q 1 n0 n1 n2 54321098 43219876 98765 11199987 q 2 n0 2n1 4n2 54321098 2 43219876 4 98765 31723594 q n2 98765 98765 As shown these values may be negative For the purpose of later explanation it will be useful to view this evaluation process as a matrix vector multiplication where each row of the matrix contains powers of one of the evaluation points and the vector contains the coefficients of the polynomial p 0 p 1 p 1 p 2 p 0 0 0 1 0 2 1 0 1 1 1 2 1 0 1 1 1 2 2 0 2 1 2 2 0 0 1 m 0 m 1 m 2 1 0 0 1 1 1 1 1 1 1 2 4 0 0 1 m 0 m 1 m 2 displaystyle left begin matrix p 0 p 1 p 1 p 2 p infty end matrix right left begin matrix 0 0 amp 0 1 amp 0 2 1 0 amp 1 1 amp 1 2 1 0 amp 1 1 amp 1 2 2 0 amp 2 1 amp 2 2 0 amp 0 amp 1 end matrix right left begin matrix m 0 m 1 m 2 end matrix right left begin matrix 1 amp 0 amp 0 1 amp 1 amp 1 1 amp 1 amp 1 1 amp 2 amp 4 0 amp 0 amp 1 end matrix right left begin matrix m 0 m 1 m 2 end matrix right nbsp The dimensions of the matrix are d by km for p and d by kn for q The row for infinity is always all zero except for a 1 in the last column Faster evaluation edit Multipoint evaluation can be obtained faster than with the above formulas The number of elementary operations addition subtraction can be reduced The sequence given by Bodrato 6 for Toom 3 executed here over the first operand polynomial p of the running example is the following p0 m0 m2 56789012 123456 56912468 p 0 m0 56789012 56789012 p 1 p0 m1 56912468 78901234 135813702 p 1 p0 m1 56912468 78901234 21988766 p 2 p 1 m2 2 m0 21988766 123456 2 56789012 100519632 p m2 123456 123456 This sequence requires five addition subtraction operations one less than the straightforward evaluation Moreover the multiplication by 4 in the calculation of p 2 was saved Pointwise multiplication edit Unlike multiplying the polynomials p and q multiplying the evaluated values p a and q a just involves multiplying integers a smaller instance of the original problem We recursively invoke our multiplication procedure to multiply each pair of evaluated points In practical implementations as the operands become smaller the algorithm will switch to schoolbook long multiplication Letting r be the product polynomial in our example we have r 0 p 0 q 0 56789012 54321098 3084841486175176 r 1 p 1 q 1 135813702 97639739 13260814415903778 r 1 p 1 q 1 21988766 11199987 246273893346042 r 2 p 2 q 2 100519632 31723594 3188843994597408 r p q 123456 98765 12193131840 As shown these can also be negative For large enough numbers this is the most expensive step the only step that is not linear in the sizes of m and n Interpolation edit This is the most complex step the reverse of the evaluation step given our d points on the product polynomial r we need to determine its coefficients In other words we want to solve this matrix equation for the vector on the right hand side r 0 r 1 r 1 r 2 r 0 0 0 1 0 2 0 3 0 4 1 0 1 1 1 2 1 3 1 4 1 0 1 1 1 2 1 3 1 4 2 0 2 1 2 2 2 3 2 4 0 0 0 0 1 r 0 r 1 r 2 r 3 r 4 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 2 4 8 16 0 0 0 0 1 r 0 r 1 r 2 r 3 r 4 displaystyle begin aligned left begin matrix r 0 r 1 r 1 r 2 r infty end matrix right amp left begin matrix 0 0 amp 0 1 amp 0 2 amp 0 3 amp 0 4 1 0 amp 1 1 amp 1 2 amp 1 3 amp 1 4 1 0 amp 1 1 amp 1 2 amp 1 3 amp 1 4 2 0 amp 2 1 amp 2 2 amp 2 3 amp 2 4 0 amp 0 amp 0 amp 0 amp 1 end matrix right left begin matrix r 0 r 1 r 2 r 3 r 4 end matrix right amp left begin matrix 1 amp 0 amp 0 amp 0 amp 0 1 amp 1 amp 1 amp 1 amp 1 1 amp 1 amp 1 amp 1 amp 1 1 amp 2 amp 4 amp 8 amp 16 0 amp 0 amp 0 amp 0 amp 1 end matrix right left begin matrix r 0 r 1 r 2 r 3 r 4 end matrix right end aligned nbsp This matrix is constructed the same way as the one in the evaluation step except that it s d d We could solve this equation with a technique like Gaussian elimination but this is too expensive Instead we use the fact that provided the evaluation points were chosen suitably this matrix is invertible see also Vandermonde matrix and so r 0 r 1 r 2 r 3 r 4 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 2 4 8 16 0 0 0 0 1 1 r 0 r 1 r 1 r 2 r 1 0 0 0 0 1 2 1 3 1 1 6 2 1 1 2 1 2 0 1 1 2 1 6 1 2 1 6 2 0 0 0 0 1 r 0 r 1 r 1 r 2 r displaystyle begin aligned left begin matrix r 0 r 1 r 2 r 3 r 4 end matrix right amp left begin matrix 1 amp 0 amp 0 amp 0 amp 0 1 amp 1 amp 1 amp 1 amp 1 1 amp 1 amp 1 amp 1 amp 1 1 amp 2 amp 4 amp 8 amp 16 0 amp 0 amp 0 amp 0 amp 1 end matrix right 1 left begin matrix r 0 r 1 r 1 r 2 r infty end matrix right amp left begin matrix 1 amp 0 amp 0 amp 0 amp 0 tfrac 1 2 amp tfrac 1 3 amp 1 amp tfrac 1 6 amp 2 1 amp tfrac 1 2 amp tfrac 1 2 amp 0 amp 1 tfrac 1 2 amp tfrac 1 6 amp tfrac 1 2 amp tfrac 1 6 amp 2 0 amp 0 amp 0 amp 0 amp 1 end matrix right left begin matrix r 0 r 1 r 1 r 2 r infty end matrix right end aligned nbsp All that remains is to compute this matrix vector product Although the matrix contains fractions the resulting coefficients will be integers so this can all be done with integer arithmetic just additions subtractions and multiplication division by small constants A difficult design challenge in Toom Cook is to find an efficient sequence of operations to compute this product one sequence given by Bodrato 6 for Toom 3 is the following executed here over the running example r0 r 0 3084841486175176 r4 r 12193131840 r3 r 2 r 1 3 3188843994597408 13260814415903778 3 3357323473768790 r1 r 1 r 1 2 13260814415903778 246273893346042 2 6753544154624910 r2 r 1 r 0 246273893346042 3084841486175176 3331115379521218 r3 r2 r3 2 2r 3331115379521218 3357323473768790 2 2 12193131840 13128433387466 r2 r2 r1 r4 3331115379521218 6753544154624910 12193131840 3422416581971852 r1 r1 r3 6753544154624910 13128433387466 6740415721237444 We now know our product polynomial r r x 3084841486175176 6740415721237444 x 3422416581971852 x 2 13128433387466 x 3 12193131840 x 4 displaystyle begin array rrr r x amp amp 3084841486175176 amp amp 6740415721237444x amp amp 3422416581971852x 2 amp amp 13128433387466x 3 amp amp 12193131840x 4 end array nbsp If we were using different km kn or evaluation points the matrix and so our interpolation strategy would change but it does not depend on the inputs and so can be hard coded for any given set of parameters Recomposition edit Finally we evaluate r B to obtain our final answer This is straightforward since B is a power of b and so the multiplications by powers of B are all shifts by a whole number of digits in base b In the running example b 104 and B b2 108 3084 8414 8617 5176 6740 4157 2123 7444 3422 4165 8197 1852 13 1284 3338 7466 121 9313 1840 121 9326 3124 6761 1632 4937 6009 5208 5858 8617 5176 And this is in fact the product of 1234567890123456789012 and 987654321987654321098 Interpolation matrices for various k editHere we give common interpolation matrices for a few different common small values of km and kn Toom 1 edit Toom 1 km kn 1 requires 1 evaluation point here chosen to be 0 It degenerates to long multiplication with an interpolation matrix of the identity matrix 1 1 1 displaystyle left begin matrix 1 end matrix right 1 left begin matrix 1 end matrix right nbsp Toom 1 5 edit Toom 1 5 km 2 kn 1 requires 2 evaluation points here chosen to be 0 and Its interpolation matrix is then the identity matrix 1 0 0 1 1 1 0 0 1 displaystyle left begin matrix 1 amp 0 0 amp 1 end matrix right 1 left begin matrix 1 amp 0 0 amp 1 end matrix right nbsp This also degenerates to long multiplication both coefficients of one factor are multipled by the sole coefficient of the other factor Toom 2 edit Toom 2 km 2 kn 2 requires 3 evaluation points here chosen to be 0 1 and It is the same as Karatsuba multiplication with an interpolation matrix of 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 1 displaystyle left begin matrix 1 amp 0 amp 0 1 amp 1 amp 1 0 amp 0 amp 1 end matrix right 1 left begin matrix 1 amp 0 amp 0 1 amp 1 amp 1 0 amp 0 amp 1 end matrix right nbsp Toom 2 5 edit Toom 2 5 km 3 kn 2 requires 4 evaluation points here chosen to be 0 1 1 and It then has an interpolation matrix of 1 0 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 0 0 1 2 1 2 1 1 1 2 1 2 0 0 0 0 1 displaystyle left begin matrix 1 amp 0 amp 0 amp 0 1 amp 1 amp 1 amp 1 1 amp 1 amp 1 amp 1 0 amp 0 amp 0 amp 1 end matrix right 1 left begin matrix 1 amp 0 amp 0 amp 0 0 amp tfrac 1 2 amp tfrac 1 2 amp 1 1 amp tfrac 1 2 amp tfrac 1 2 amp 0 0 amp 0 amp 0 amp 1 end matrix right nbsp Notes edit a b Knuth p 296 Crandall amp Pomerance p 474 Crandall amp Pomerance p 536 Knuth p 302 Positive Results chapter III of Stephen A Cook On the Minimum Computation Time of Functions a b c Marco Bodrato Towards Optimal Toom Cook Multiplication for Univariate and Multivariate Polynomials in Characteristic 2 and 0 In WAIFI 07 proceedings volume 4547 of LNCS pages 116 133 June 21 22 2007 author websiteReferences editD Knuth The Art of Computer Programming Volume 2 Third Edition Addison Wesley 1997 Section 4 3 3 A Digital methods pg 294 R Crandall amp C Pomerance Prime Numbers A Computational Perspective Second Edition Springer 2005 Section 9 5 1 Karatsuba and Toom Cook methods pg 473 Bodrato Marco 2007 Towards optimal Toom Cook multiplication for univariate and multivariate polynomials in characteristic 2 and 0 In Carlet Claude Sunar Berk eds Arithmetic of Finite Fields First International Workshop WAIFI 2007 Madrid Spain June 21 22 2007 Proceedings Lecture Notes in Computer Science Vol 4547 Springer pp 116 133 doi 10 1007 978 3 540 73074 3 10 Bodrato Marco August 8 2011 Optimal Toom Cook Polynomial Multiplication Toom Cook convolution implementation for polynomials Retrieved 22 September 2023 External links editToom Cook 3 way multiplication from GMP documentation Toom 3 Way Multiplication GNU MP multiple precision arithmetic library version 6 3 0 manual Free Software Foundation Inc 30 July 2023 Copyright 1991 1993 2016 2018 2020 Retrieved from https en wikipedia org w index php title Toom Cook multiplication amp oldid 1205273972, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.