Karatsuba法

梅谷 武
作成:2001-02-14 更新:2005-12-31
多倍長整数の高速乗算法であるKaratsuba法についてわかりやすく解説する。
IMS:20010214001; NDC:418; keywords:Karatsuba法, Landauの記号;
目  次
1. Karatsuba法
参考文献
1. Karatsuba法
1.1 ディジタル法
 Knuth[S2]によれば、この算法がはじめて公表されたのは、1962年に当時のソ連のKaratsubaが発表した論文によるそうです。Knuth自身はこれをディジタル法と名付けています。
 2つの多倍長整数が基数P>0によって次のように表現されているとします。
a
=
a1P+a0, 0≦ai<P (i=0,1)
b
=
b1P+b0, 0≦bi<P (i=0,1)
この積を計算します。
c
=
ab
=
(a1P+a0)(b1P+b0)
=
a1b1P2+(a1b0+a0b1)P+a0b0
この最後の式からこの計算には4回の積と3回の和と桁上げ処理が必要なことがわかります。ところがここで、
s0
=
a0b0
s2
=
a1b1
s1
=
(a1-a0)(b0-b1)+s0+s2
とおくと
c
=
s2P2+s1P+s0
が成り立ちます。この場合は3回の積と4回の和と2回の差と桁上げ処理になります。つまり1回の積を1回の和と2回の差に置き換えたことになります。さらに、
t0
=
a0b0
t2
=
a1b1
t1
=
(a1+a0)(b1+b0)-t0-t2
とおくと
c
=
t2P2+t1P+t0
が成り立ちます。この場合も3回の積と4回の和と2回の差と桁上げ処理になります。
 前者は、例えば2進計算機が32bitの演算器を持つときに、基数P=232として倍精度の乗算に適用することができます。後者は、t1の計算の途中で負の値がでてくることはありませんので、多倍長整数計算で値を絶対値表現しているときに有効です。
1.2 計算量の評価
 まず、計算量の評価を行なうために使われる道具を導入しておきましょう。
定義1.1 (Landauの記号)
 2つの実関数g(x), h(x)について、xがある値αに近づくときの大小関係を表わすために、
g(x)=O(h(x)),g(x)=o(h(x))
という記号を次のように定義する。α±∞であってもよい。
  1. 大文字のOは近づき方が同じオーダー(程度)であることを表わす。
    g(x)=O(h(x))∃A∈R:
    lim
    x→α
    |g(x)
    h(x)
    |
    A
  2. 小文字のoは近づき方がずっと小さいことを表わす。
    g(x)=o(h(x))
    lim
    x→α
    g(x)
    h(x)
    =0
 nビット長の多倍長整数の乗算の古典算法による計算時間(これを計算量と呼ぶ)をTCL(n)とすると、n→∞のとき
TCL(n)=O(n2)
となることがわかっています。Karatsuba法の計算量TKO(n)を評価してみましょう。加減算の計算量はn→∞のときO(n)であることから、
TKO(n)3TKO(n/2)+kn
となる定数kが存在します。TKO(1)kの大きい方を改めてkとおき、数列{2r|r=0,1,…}について、
S(20)
=
k
S(2r)
=
3S(2r-1)+k2r, r>0
と定めると
S(2r)=(3r+1-2r+1)k, r=0,1,…
が成り立ちます。なぜならば、r=0のときは明らかで、r=nで正しいと仮定すると、
S(2n+1)
=
3S(2n)+k2n+1
=
3(3n+1-2n+1)k+k2n+1
=
(3n+2-2n+2)k
となり、r=n+1でも成り立つからです(数学的帰納法)。このことから
TKO(2r)
S(2r)=(3r+1-2r+1)k
3r+1k
という不等式が得られます。nを任意に与えたときに、n以上で最小の2rが存在します。このとき
log2nrlog2n+1
となっています。上の不等式を使って、
TKO(n)
TKO(2r)
3r+1k=3k3r
ここで、
3r3log2n + 1
と実数のべき乗の定義から導かれる等式
3log2n=nlog23
を使うと、
TKO(n)9k・nlog23
が導かれます。したがって次の定理が証明されました。
定理1.2 (Karatsuba法の計算量)
 nビットの多倍長整数に対してKaratsuba法による乗算の計算量をTKO(n)とおくと、n→∞のとき、
TKO(n)=O(nlog23)=O(n1.585)
が成り立つ。
参考文献
算法
[S1] 野下 浩平, 高岡 忠雄, 町田 元, 基本的算法, 岩波書店, 1983
[S2] D. E. Knuth(中川 圭介訳), 準数値算法/算術演算, サイエンス社, 1986