ショーンハーゲ・ストラッセン法:巨大な整数の高速乗算アルゴリズム
ショーンハーゲ・ストラッセン法は、非常に大きな
整数の掛け算を高速に計算するためのアルゴリズムです。
1971年、アーノルド・ショーンハーゲとフォルカー・シュトラッセンによって発表され、長らく大規模な
整数乗算における最速アルゴリズムとして君臨していました。2007年にフーリエ変換に基づくより高速なアルゴリズムが登場しましたが、その性能差が顕著になるのは、天文学的な桁数の
整数同士の掛け算に限られるため、ショーンハーゲ・ストラッセン法は現在も広く実用されています。
アルゴリズムの概要
このアルゴリズムは、時間計算量がO(n log n log log n)という優れた特性を持っています。ここでnは入力する
整数の桁数です。この高速性を実現する鍵は、数論変換と高速フーリエ変換(FFT)にあります。
ショーンハーゲ・ストラッセン法では、まず入力となる大きな
整数を、より小さな複数の
整数に分割します。これらの小さな
整数を、数論変換を用いて別の表現に変換します。変換後の表現は、
畳み込み定理を用いて効率的に掛け合わせることができ、その結果を逆変換することで元の表現に戻し、最終的な結果を得ます。この変換と逆変換に高速フーリエ変換が用いられます。
実用性と適用例
ショーンハーゲ・ストラッセン法は、従来のカラツバ法やToom-3法よりも、ある程度の桁数を超えると計算速度が大幅に向上します。具体的には、10進数で数万桁以上の
整数同士の掛け算においてその効果を発揮し始めます。そのため、大規模な数値計算を必要とする様々な場面で利用されています。
代表的な例としては、以下のものが挙げられます。
GIMPS (Great Internet Mersenne Prime Search): メルセンヌ素数の探索において、巨大な数の素数判定に利用されています。
円周率の近似計算: 円周率を桁数の多い精度で計算する際に用いられます。
整数係数多項式の乗算: クロネッカー置換という手法を用いて、整数係数多項式の乗算を効率的に行うことができます。これは、楕円曲線暗号などの分野で重要です。
GNU Multi-Precision Library (GMP): GMPは、高精度計算のためのライブラリですが、その中でショーンハーゲ・ストラッセン法は、特定の条件下で他の乗算アルゴリズムよりも高速な計算を実現するために使用されています。
アルゴリズムの詳細
ショーンハーゲ・ストラッセン法は、いくつかの重要な概念に基づいています。
1.
畳み込み: 入力となる
整数を分割し、それらを
畳み込みという演算を通して掛け合わせます。この
畳み込みは、巡回
畳み込みや逆巡回
畳み込みを用いることで効率的に計算できます。
2.
畳み込み定理: 畳み込みは、フーリエ変換によって周波数領域に変換することで、効率的に計算できます。フーリエ変換と逆フーリエ変換を用いることで、元の領域に戻すことができます。
3.
数論変換: 高速フーリエ変換は通常複素数上で実行されますが、ショーンハーゲ・ストラッセン法では、計算の精度と効率性を向上させるために、数論変換という手法を用いて
整数環上で実行します。
4.
環の選択: 数論変換を行う際には、適切な
整数Nを選択することが重要です。Nは2のべき乗に1を加えた数(2^n+1)を選ぶことで、計算を高速化できます。
5.
シフト最適化: 2のべき乗による乗算や除算は、ビットシフト演算によって高速化できます。ショーンハーゲ・ストラッセン法では、この最適化を
積極的に利用することで計算速度の向上を図っています。
実装上の工夫
ショーンハーゲ・ストラッセン法を実装する際には、様々な最適化が施されます。例えば、入力サイズに応じて異なるアルゴリズムを使い分けたり、高速フーリエ変換アルゴリズムを工夫したり、ビットシフト演算を効果的に用いたりといった工夫がなされています。これらの最適化によって、より高速で効率的な計算が可能になります。
まとめ
ショーンハーゲ・ストラッセン法は、その高度な数学的理論と巧妙な実装手法によって、巨大な
整数の高速乗算を実現する強力なアルゴリズムです。現代の数値計算において重要な役割を果たしており、これからも様々な応用が期待されます。