Toom-Cook法

梅谷 武
作成:2001-02-24 更新:2006-01-12
多倍長整数の高速乗算法であるToom-Cook法についてわかりやすく解説する。
IMS:20010224001; NDC:418; keywords:Toom-Cook法;
目  次
1. 離散数学からの準備
2. Toom-Cook法
参考文献
1. 離散数学からの準備
1.1 順列と組み合わせ
 Toom-Cook法を理解するには、ほんの少しですが組み合わせ数学の知識があった方がいいかもしれません。記号の定義も兼ねて、順列と組み合わせから復習してみましょう。
補題1.1 (順列)
 n個のものから、k個とる順列の個数は、
P(n,k)=n!
(n-k)!
に等しい。
定義1.2 (第1種Stirling数)
 P(n,k)nに関する多項式として考えて展開する。
P(x,k)
=
x(x-1)…(x-k+1)
=
s(k,k)xk+s(k,k-1)xk-1++s(k,1)x+s(k,0)
この係数s(k,i),i=0,…,kを第1種Stirling数と呼ぶ。
補題1.3 (第1種Stirling数の性質)
 第1種Stirling数について次式が成り立つ。
s(n,0)
=
0, n≧1
s(n,n)
=
1, n≧1
s(n+1,k)
=
s(n,k-1)-ns(n,k), n≧k≧1
補題1.4 (組み合わせ)
 n個のものから、k個とる組み合わせの個数は、
C(n,k)=n!
k!(n-k)!
に等しい。
定理1.5 (2項定理)
 正の整数n>0について、x,yを変数とする恒等式
(x+y)n=n
Σ
k=0
C(n,k)xn-kyk
が成り立つ。この式によりC(n,k)を2項係数と呼ぶ。
補題1.6 (2項係数の性質)
 2項係数について次式が成り立つ。
C(n,0)
=
1, n≧1
C(n,n)
=
1, n≧1
C(n,k)
=
C(n-1,k)+C(n-1,k-1), n≧k≧1
 この性質によって、任意の2項係数を加法だけを使って計算することができます。この算法を図形的に表現したものが、いわゆるPascalの三角形です。Toomの算法を図形的に表現すると、やはりToomの三角形ともいえる図形になります。
1.2 第2種Stirling数
定義1.7 (第2種Stirling数)
 n個のものをk個に分割する仕方の個数を第2種Stirling数と呼び、S(n,k)と書く。n≧k≧1以外のときはS(n,k)=0と約束する。
補題1.8 (第2種Stirling数の性質)
 第2種Stirling数について次式が成り立つ。
S(n,1)
=
1, n≧1
S(n,n)
=
1, n≧1
S(n+1,k)
=
S(n,k-1)+kS(n,k), n≧k≧1
補題1.9
 第2種Stirling数について次式が成り立つ。
S(n,k)=n-1
Σ
i=0
C(n-1,i)S(i,k-1), n≧1
補題1.10
 第2種Stirling数について次式が成り立つ。
xn=n
Σ
k=1
S(n,k)P(x,k), n≧1, xは変数
補題1.11
 第2種Stirling数について次式が成り立つ。
S(n,k)=1
k!
k
Σ
i=1
(-1)k-iC(k,i)in, n≧k≧1
2. Toom-Cook法
2.1 Toomの三角形
 Knuth[S2]によれば、Toom-Cook法はKaratsuba法が発表された翌年の1963年にやはりソ連のA. L. Toomによって基本的な考え方が発表され、その後、1966年にハーバード大学のS. A. Cookにより実際の計算機で作譜する方法が示されました。米ソ冷戦時代のこの時期、この分野においてはソ連が先行し、米国が追いかけていたようにも見えます。
 K>0とし、正の整数a,bが、基数P=2Kにより次のようにP進表現されるものとします。
a
=
arPr++a1P+a0,0≦ai<P
b
=
brPr++b1P+b0,0≦bi<P
ここで、多項式
a(x)
=
arxr++a1x+a0
b(x)
=
brxr++b1x+b0
を考え、その積を
c(x)
=
a(x)b(x)
=
c2rx2r++c1x+c0
とします。Toom-Cook法は2r+1個の値、
c(i)=a(i)b(i), i=0,…,2r
からc(x)の係数を計算し、それに基数P=2Kを代入することによって積abを求めます。
 まず、m=2r+1とおき多項式c(x)
c(x)
=
cm-1xm-1++c1x+c0
=
m-1
Σ
i=1
cixi+c0
=
m-1
Σ
i=1
ci(i
Σ
k=1
S(i,k)P(x,k))
+c0
=
m-1
Σ
i=0
θiP(x,i)
P(x,i)で展開します。ここで、a(x),b(x)の係数が負でないことからc(x)の係数も負ではなく、さらにθi,i=0,…m-1も負でないことに注意してください。このことがToom-Cook法の途中の計算結果が負でないことを保証することになります。
補題2.1
 P(x,k)に関して次式が成り立つ。
P(x+1,k)-P(x,k)=kP(x,k-1), k≧1
証明 k=1のとき、
P(x+1,1)-P(x,1)
=
x+1-x
=
1=P(x,0)
k>1のとき、
P(x+1,k)-P(x,k)
=
(x+1)x(x-1)…(x-k+2)-x(x-1)…(x-k+1)
=
x(x-1)…(x-k+2)(x+1-(x-k+1))
=
kP(x,k-1)
補題2.2
 c(x)に関して次式が成り立つ。
c(x+1)-c(x)=m-1
Σ
i=1
iP(x,i-1)
証明 
c(x+1)-c(x)
=
m-1
Σ
i=1
θi(P(x+1,i)-P(x,i))
=
m-1
Σ
i=1
iP(x,i-1)
定義2.3
 多項式c(x) = cm-1xm-1 + … + c1x + c0が与えられたとき、
Ψc(x,k)=1
k!
k
Σ
i=0
(-1)iC(k,i)c(x+k-i), k≧0
と定義する。
補題2.4
 これまでの仮定の下で次式が成り立つ。
Ψc(x,k+1)=1
k+1
c(x+1,k)-Ψc(x,k)), k≧0
証明 定義から、
Ψc(x,k+1)=1
(k+1)!
k+1
Σ
i=0
(-1)iC(k+1,i)c(x+k+1-i), k≧0
である。
C(k+1,i)=C(k,i)+C(k,i-1)
を使って、
Ψc(x,k+1)
=
1
(k+1)!
(k
Σ
i=1
(-1)i(C(k,i)+C(k,i-1))c(x+k+1-i)+(-1)k+1c(x)+(-1)0c(x+k+1))
=
1
(k+1)!
(k
Σ
i=0
(-1)iC(k,i)c(x+k+1-i)-k
Σ
j=0
(-1)jC(k,j)c(x+k-j))
=
1
k+1
(1
k!
k
Σ
i=0
(-1)iC(k,i)c((x+1)+k-i)-1
k!
k
Σ
j=0
(-1)jC(k,j)c(x+k-j))
定理2.5 (Toom-Cook法の原理)
 これまでの仮定の下で次式が成り立つ。
Ψc(x,k)=m-1
Σ
i=k
C(i,k)θiP(x,i-k), k≧0
証明 帰納法による。k=0のとき
Ψc(x,0)
=
c(x)
=
m-1
Σ
i=0
θiP(x,i)
k=1のときは補題[2.2]を使う。
Ψc(x,1)
=
c(x+1)-c(x)
=
m-1
Σ
i=1
iP(x,i-1)
=
m-1
Σ
i=1
C(i,1)θiP(x,i-1)
kで正しいとしてk+1で成り立つことを示す。
Ψc(x,k+1)
=
1
k+1
c(x+1,k)-Ψc(x,k))
=
1
k+1
(m-1
Σ
i=k
C(i,k)θiP(x+1,i-k)-m-1
Σ
i=k
C(i,k)θiP(x,i-k))
=
1
k+1
m-1
Σ
i=k+1
C(i,k)θi(P(x+1,i-k)-P(x,i-k)
=
1
k+1
m-1
Σ
i=k+1
C(i,k)θi(i-k)P(x,i-(k+1))
=
m-1
Σ
i=k+1
C(i,k+1)θiP(x,i-(k+1))
系2.6
 これまでの仮定の下で次式が成り立つ。
Ψc(0,k)=θk, k≧0
 これでToomの三角形を描く準備ができました。r=2のときを考えます。まず
c(0),c(1),c(2),c(3),c(4)
を計算し、これを利用して次の行列を計算します。
c(0)=Ψc(0,0)
Ψc(0,1)
Ψc(0,2)
Ψc(0,3)
Ψc(0,4)
c(1)=Ψc(1,0)
Ψc(1,1)
Ψc(1,2)
Ψc(1,3)
0
c(2)=Ψc(2,0)
Ψc(2,1)
Ψc(2,2)
0
0
c(3)=Ψc(3,0)
Ψc(3,1)
0
0
0
c(4)=Ψc(4,0)
0
0
0
0
1列目はすでに計算されています。2列目以降は
Ψc(x,k+1)=1
k+1
c(x+1,k)-Ψc(x,k))
によって計算します。k+1列目の値は、k列目の2つの値の差をk+1で割ることによって得られます。この結果得られた行列の第1行が
θ0,θ1,θ2,θ3,θ4
となっています。
参考文献
離散数学
[D1] 高橋 巌郎, 藤重 悟, 離散数学, 岩波書店, 1981
算法
[S1] 野下 浩平, 高岡 忠雄, 町田 元, 基本的算法, 岩波書店, 1983
[S2] D. E. Knuth(中川 圭介訳), 準数値算法/算術演算, サイエンス社, 1986