高速な bignum 二乗計算
問題:
符号なし DWORD の動的配列として表される 2 つの bigint が与えられると、 y = x^2 を精度なしでできるだけ高速に計算します損失。
コンテキスト:
この問題は、二乗演算が重要な bignum 除算の高速化というコンテキストで発生します。
質問:
最も効率的に y = x^2 を計算する方法方法は?
答え:
最初のアプローチ:
最初のアプローチでは、乗算 y = xx を使用し、削減することで複数の乗算を回避します。 NN 乗算で (N 1)*(N/2)
Karatsuba Multiplication:
Karatsuba 乗算アルゴリズムは、乗算演算をさらに最適化するために採用されています。分割統治を使用して、大きな数値を小さなチャンクに分割することで乗算を高速化します。
パフォーマンス測定:
テストにより、最適化されたカラツバ乗算は初期の O(より大きな数値用の N^2) 乗算アルゴリズム (約 32*98)
SQR 実装用の修正シェーンハーゲ シュトラッセン乗算:
FFT (高速フーリエ変換) として知られる修正シェーンハーゲ シュトラッセン乗算は、SQR 演算を高速化するために実装されています。 。ただし、精度が低下するため、使用できないと見なされます。
NTT Optimization:
NTT (Number Theoretic Transform) は、乗算と SQR 演算を最適化するために使用されます。 FFT よりも高速ですが、モジュラー演算が必要で、数値サイズによって制限されます。
現在の状態:
現在の実装では、数値サイズが小さい場合、SQR 演算に最適化されたカラツバ アルゴリズムが使用されます。特定のしきい値を超え、小さい数値に対しては初期の高速 SQR アプローチが使用されます。
傑出した質問:
著者は、見落とされてきたもっと些細な、または効率的な解決策がある可能性があることを認めています。より良いアルゴリズムの探求は続いています。
以上が可能な限り最速の Bignum 二乗を達成するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。