【问题标题】:Does multiplication take unit time?乘法需要单位时间吗?
【发布时间】:2015-04-21 20:03:38
【问题描述】:

我有以下问题

什么情况下乘法可以看成单位时间 操作?

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

【问题讨论】:

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


【解决方案1】:

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

当位数是一个固定的数字,比如 32 时,讨论渐近复杂度是没有意义的,你可以将乘法视为O(1) 运算,无论你在看什么算法.什么时候可以变得任意大,比如 Java 的 BigInteger 类,那么乘法取决于这些数字的大小,存储它们所需的内存也是如此。

【讨论】:

    【解决方案2】:

    仅在您对两个数字执行操作的情况下,of numeric type此处强调,不涉及二进制细节),您只需假设正在执行的操作是只有恒定的时间。

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

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

    因此,为了简单起见,我们执行基于分而治之的乘法,也称为Karatsuba's algorithm for multiplication,其复杂度为 O(n^1.59),从而将乘法和加法的总数减少到较少的数量乘法和一些加法。

    我希望我没有误判这个问题。如果是这样,请提醒我,以便 我可以删除这个答案。如果我正确理解了这个问题,那么这里发布的其他答案似乎 不完整。

    【讨论】:

      【解决方案3】:

      unit time 表达有点模棱两可(AFAIK 用的不多)。

      真正的单位时间是在单个时钟周期内执行乘法运算时实现的。这在现代处理器上很少发生。

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

      当操作数的长度是有界的,所以时间永远不会超过给定的持续时间,我们也说一个操作是在恒定时间中执行的。

      这个恒定的持续时间可以作为运行时间的计时单位,这样你就可以用“乘数”而不是秒数(ops, flops)来计算。

      最后,您可以根据算法执行的乘法次数来评估算法的性能,而与它们所花费的时间无关。

      【讨论】:

      • 没有更多上下文,很难猜出提问者的想法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多