算法的时间和空间复杂度是多少,它计算两个长度为n的向量之间的点积?
答案 0 :(得分:11)
如果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)
。