乘法是否需要单位时间?

时间:2015-04-21 20:03:38

标签: algorithm time-complexity complexity-theory multiplication execution-time

我有以下问题

  

在什么情况下可以将乘法视为单位时间   操作

但我认为乘法总是被视为单位时间。我错了吗?

3 个答案:

答案 0 :(得分:7)

这取决于N是什么。如果N是任意大数的位数,那么随着位数的增加,计算产品需要更长的时间。但是,在大多数编程语言和应用程序中,数字的大小限制为一些合理的位数(通常为32或64)。在硬件中,这些数字在一个步骤中相乘,而不依赖于数字的大小。

当位数是固定数字时,如32,那么谈论渐近复杂度是没有意义的,你可以根据你的算法来处理乘法,就像O(1)运算一样。 #39;重看。什么时候可以变得任意大,就像使用Java的BigInteger类一样,然后乘法取决于这些数字的大小,存储它们所需的内存也是如此。

答案 1 :(得分:5)

只有在您对两个号码执行操作的情况下,of numeric type强调此处,不会进入二进制细节),您只需要假设正在执行的操作只是一个恒定的时间。

它没有被定义为单位时间,但更严格的是,即使我们增加数字的大小也不会改变的恒定时间间隔,但实际上计算确实利用了更多的时间对大数字进行计算)。这些通常被认为是微不足道的,除非乘以的数字太大,如 BigIntegers in Java 等。

但是,一旦我们开始执行二进制字符串的乘法运算,我们的复杂性就会增加,而朴素的方法会产生O(n ^ 2)的复杂性。

因此,为了简化,我们执行基于除法和征服的乘法,也称为Karatsuba's algorithm for multiplication,其复杂度为O(n ^ 1.59),这减少了乘法的总数并增加了一些较小的乘法乘法次数和一些加法。

  

我希望我没有错误判断这个问题。如果是这样,请提醒我   我可以删除这个答案。如果我理解了这个问题,那么这里贴出的另一个答案似乎就是   不完整的。

答案 2 :(得分:1)

表达式单位时间有点含糊不清(AFAIK用得不多)。

在单个时钟周期内执行乘法时,实现单位时间。这在现代处理器上很少发生。

如果乘法的执行时间不依赖于操作数的特定值,我们可以说它是在恒定时间中执行的。

当操作数长度有界时,时间永远不会超过给定的持续时间,我们也会说在恒定时间内执行操作

此恒定持续时间可用作运行时间的计时单位,因此您可以计算“倍数”而不是秒数(操作,触发器)。

最后,您可以根据其执行的乘数的数量来评估算法的效果,而与其执行的时间无关。