大きな数の高速二乗計算
問題:
次の動的配列として表される bignum が与えられたとします。符号なし DWORD の場合、タスクは失うことなく、bignum の 2 乗をできるだけ早く見つけることです。
ソリューション アプローチ:
提供されたアルゴリズムは、分割統治アプローチを使用して乗算を最適化することにより、bignum の 2 乗を効率的に計算します。
最適化された唐鍔乗算:
微調整と最適化の後、カラツバ乗算は、32*98 ビットを超える入力サイズに対して O(N^2) の古典的な乗算よりも高速になりました。数値が小さい場合、高速 sqr 法の方が引き続き効率的です。
平方実装用に修正されたシェーンハーゲ シュトラッセン乗算:
高速化のために FFT 変換と NTT 変換が検討されましたが、精度の低下と実装の複雑さにより、それらは軽減されました
NTT 最適化:
NTT の集中的な最適化により、NTT sqr のしきい値が 31032 ビットに設定され、NTT mul が 32 ビットに設定され、パフォーマンスが向上しました。 139632 bits.
結論:
数値が小さい場合は、高速 sqr 法が最速のオプションであることがわかります。しきい値を超えると、カラツバの乗算がより効率的になります。しかし、Karatsuba に代わるより効率的な代替手段の模索は続いています。
以上がどうすれば大きな数値の高速二乗計算を実現できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。