我被时间复杂性困住了

时间:2019-10-13 14:04:36

标签: algorithm time-complexity

我正在研究算法的时间复杂性,并且遇到了麻烦。您能帮我找到以下代码的时间复杂度吗?谢谢。

x=1;
for(i=0; i<=n-1; i++){
        for(int j=1; j<=x; j++)
            std::cout<<j<< std::endl;
        x =x*2;
    }

1 个答案:

答案 0 :(得分:0)

这是我思考过程的演练:

  1. 第一个for循环运行n次,因此时间复杂度为 O(n)
  2. 第二个for循环随着第一个for循环的进行而增加了两倍,因此时间复杂度为 O(2 ^ n)
  3. 将两者结合起来,看起来代码的时间复杂度为 O(n * 2 ^ n)
  4. 但是,您更深入地思考,这是不正确的。
  5. 如果考虑第二个for循环运行的循环数,则为1,2,4,4,...,2 ^(n-2),2 ^(n-1)。
  6. 因此,循环总数为2 ^(n-1)+ 2 ^(n-2)+ ... + 2 ^ 1 + 2 ^ 0。
  7. 对于任何给定的x,x + x / 2 + x / 4 + ... + 2 +1 = 2 * x-k(其中k的值取决于)。
  8. 采用相同的概念,循环总数为2 * 2 ^(n-1)。
  9. 因此,总体时间复杂度为 O(2 ^ n)