【问题标题】:Time and space complexity of vector dot-product computation向量点积计算的时间和空间复杂度
【发布时间】:2010-09-19 00:50:35
【问题描述】:

计算两个长度为n的向量之间的点积的算法的时间和空间复杂度是多少?

【问题讨论】:

  • 您的老师正在探究的是,点积是线性时间O(n) 运算,其中 n 是两个向量的长度。这假设您将乘法和加法视为常数时间运算。从技术上讲,*+ 不是恒定时间。如果你想用图灵机的时间复杂度分割头发并超级精确,那么将m定义为被相乘的数字的平均长度,将a定义为被添加的数字的平均长度。复杂度变为:O(n * (m ^ 1.465) + ((n-1) * log(a))),其折叠为:O(n*m + n*log(a))

标签: algorithm vector complexity-theory


【解决方案1】:

如果这2个向量分别是a = [a1, a2, ... , an]b = [b1, b2, ... , bn],那么

点积由a.b = a1 * b1 + a2 * b2 + ... + an * bn给出

要计算这个,我们必须执行n 乘法和(n-1) 加法。 (我假设这是您所指的点积算法)。

假设乘法和加法是常数时间运算, 因此时间复杂度为O(n) + O(n) = O(n)

我们在计算过程中唯一需要的辅助空间是保存“到目前为止的部分点积”和最后计算的积,即ai * bi

假设我们可以将这两个值都保存在常量空间中, 因此空间复杂度为O(1) + O(1) = O(1)

【讨论】:

  • 谢谢。但我需要用 n 表示它。所以时间复杂度是n+(n-1),空间是2n?
  • big-theta 也隐藏了常量(在本例中,O = big-Theta)。你的意思可能是一个等价的
  • @Alexandre C:我同意 - 在这种情况下,我提供了 Big Theta。并不是在暗示(尽管阅读了我的评论,听起来就是这样),只是 OP 是否意识到这实际上是一个紧密的界限。
猜你喜欢
  • 1970-01-01
  • 2018-08-07
  • 2021-01-23
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
相关资源
最近更新 更多