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