製品を計算するための最も効率的な方法は何ですか
a 1 b 2 c 3 d 4 e5 ..。_
二乗のコストが乗算の約半分であると仮定しますか?オペランドの数が100未満です。
乗算時間がオペランドの長さの2乗に比例する場合にも(のようにjava.math.BigInteger
)簡単なアルゴリズムはありますか?
最初の(そして唯一の)答えは、操作の数に対して完璧です。
おかしなことに、かなりBigInteger
のサイズに適用すると、この部分はまったく問題になりません。最適化なしでabbcccddddeeeeeを計算する場合でも、ほぼ同じ時間がかかります。
ほとんどの時間は最終的な乗算に費やされます(BigInteger
カラツバ、トゥームクック、FFTなどのよりスマートなアルゴリズムは実装されていないため、時間は2次式です)。重要なのは、中間被乗数がほぼ同じサイズであることを保証することです。つまり、ほぼ同じサイズの数p、q、r、sが与えられた場合、 (pq)(rs)の計算は通常((pq)r)sよりも高速です。速度比は、数十のオペランドで約1:2のようです。
アップデート
Java 8では、にカラツバ法とToom-Cook法の両方の乗算がありBigInteger
ます。