为什么乘法n ^ 2次?

时间:2013-07-22 05:49:06

标签: big-o time-complexity multiplication

我已经读过加法/减法等操作是线性时间,乘法是n ^ 2时间。为什么这是真的?

当n是较小的操作数时,是不是加floor(log n)次?相同的参数用于减法,对于乘法,如果我们使程序进行长乘法而不是将整数加在一起,那么复杂性是floor(log a) * floor(log b),其中a和b是操作数吗?

2 个答案:

答案 0 :(得分:2)

答案取决于什么是“n”。当他们说加法是O(n)并且乘法(使用朴素算法)是O(n ^ 2)时,n是数字的长度,可以是比特或其他单位。使用该定义是因为任意精度算术被实现为对“数字”列表的操作(不一定是基数10)。

如果n是要添加或相乘的数字,只要数字存储在log n空间中,复数就是log n和(log n)^ 2为正n。

答案 1 :(得分:0)

(例如)273 x 12的乘法的天真方法(使用分配规则)扩展为(200 + 70 + 3) x (10 + 2)或:

  200 x 10 + 200 x  2 
+  70 x 10 +  70 x  2
+   3 x 10 +   3 x  2

这种简化的想法是将乘法减少到可以轻松完成的事情。对于你的小学数学,这将使用数字,假设你知道从0到9的时间表。对于bignum库,其中每个“数字”可以是0到9999之间的值(为了便于十进制打印),适用相同的规则,能够相对不断地乘以小于10,000的数字。)

因此,如果n是位数,则复杂度确实为O(n2),因为“常数”运算的数量往往会随着“数字”计数的乘积而上升。

即使您的数字定义略有不同(例如0到9999之间的值,或者甚至是二进制数字01之一),也是如此。