计算产品的最有效方法是什么
a 1 b 2 c 3 d 4 e 5 ...
假设平方的成本大约是乘法的一半?操作数的数量小于 100。
对于乘法时间与操作数长度的平方成正比(如java.math.BigInteger
)的情况,是否还有一种简单的算法?
第一个(也是唯一的)答案是完美的操作数量。
有趣的是,当应用于 sizable 时BigInteger
,这部分根本无关紧要。即使在没有任何优化的情况下计算abbcccddddeeeee 也需要大约相同的时间。
大部分时间花在最后的乘法上(BigInteger
没有实现更智能的算法,如 Karatsuba、Toom-Cook 或 FFT,所以时间是二次的)。重要的是确保中间被乘数的大小大致相同,即给定数字p, q, r, s的大小大致相同,计算(pq) (rs)通常比((pq) r) s快。对于几十个操作数,速度比似乎约为 1:2。
更新
在 Java 8 中,在BigInteger
.