确定时间复杂度c ++

时间:2020-10-12 06:04:08

标签: c++ time-complexity big-o

给出以下陈述:

for (int i = 1; i < n; i = i * 2)
  for (int j = 0; j < i; j++) 

这个o(n)运行时如何? 我很确定第一个for循环在O(logn)中运行,但是我不确定如何解释第二个for循环。

1 个答案:

答案 0 :(得分:1)

首先,我将假设n的效能为2加1(以便i实际上达到它)。
鉴于此,在外循环的最后一次迭代中,我们有i = n。对于该值,内部循环将迭代n次。
现在,外循环的倒数第二次迭代使i为该值的一半。因此,内部循环在那时进行了i/2次迭代。
将每个内部循环的步骤反向,我们得到的步骤总数为

n + n / 2 + n / 4 + n / 8 + ...

此总和等于2 * n-1,以Θ(n)表示。

(如果n的功效不是2,则i的最后一个值就是小于n的功效2,因此我们仍然保留复杂性类。 )

相关问题