我已经读过加法/减法等操作是线性时间,乘法是n ^ 2时间。为什么这是真的?
当n是较小的操作数时,是不是加floor(log n)
次?相同的参数用于减法,对于乘法,如果我们使程序进行长乘法而不是将整数加在一起,那么复杂性是floor(log a) * floor(log b)
,其中a和b是操作数吗?
答案 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之间的值,或者甚至是二进制数字0
或1
之一),也是如此。