以下算法的时间复杂度是多少?

时间:2017-05-15 08:28:13

标签: algorithm time-complexity big-o

给定n个整数序列,A。 为了找到序列的总和,我们遵循以下递归算法,我们制作一个大小为n / 2的新序列B,其中B [i] = A [2 * i] + A [2 * i + 1] 0到n / 2 - 1,我们用A替换A.当A的大小为1时,我们返回元素本身。

不应该按时计算时间复杂度吗?

T(n) = T(n/2) + O(n/2)
or
T(n) = T(n/4) + O(n/4) + O(n/2)
or
T(n) = O(1) + O(2) + O(4) + ... + O(n/4) + O(n/2)

此时我不确定我是否正确地做了这个值应该等于什么。我假设O(nlgn)

我如何找到解决方案?另外,使用主定理给我O(n),我不确定我是否正确应用主定理。有人可以在这里指导我吗?

1 个答案:

答案 0 :(得分:5)

首先观察

O(1) + O(2) + O(4) + ... + O(n/4) + O(n/2) =
  O(1 + 2 + 4 + ... + n/4 + n/2)

然后你可以在这里认出几何级数的总和。假设n = 2^m(2的幂为m)

  1 + 2 + 4 + ... + 2^(m-2) + 2^(m-1) = 2^m = n

因此,你的方法给你T(n)= O(n)。这是与主定理的一致。