给出以下陈述:
for (int i = 1; i < n; i = i * 2)
for (int j = 0; j < i; j++)
这个o(n)运行时如何? 我很确定第一个for循环在O(logn)中运行,但是我不确定如何解释第二个for循环。
答案 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,因此我们仍然保留复杂性类。 )