这段代码的时间复杂度是多少?

时间:2013-05-22 19:02:47

标签: complexity-theory big-o

开始

          Input: n (pos. Integer)
          Output: y (pos. Integer)
          Other: x, z (pos. Integer)
                y := 0;
                x :=0;

                while x < n do
                      y := y + 1;
                      z := 0;
                      while z < 4 do
                          x := x + 1;
                          z := z + 1;
                      end;
                      for (i=0;i<2;i++){ 
                          x=x-1;
                      }
                End;

这是怎么做到的?我知道当有一个for循环时,它是O(N),当有一个while时它是O(log N)。 我很感激帮助:)

谢谢

1 个答案:

答案 0 :(得分:0)

执行此操作的一种好方法是确定外循环执行的次数以及每次迭代执行的工作量。

循环体如下:

            y := y + 1;
            z := 0;
            while z < 4 do
                  x := x + 1;
                  z := z + 1;
            end;
            for (i=0;i<2;i++){ 
                     x=x-1;
            }

第一行是O(1)工作,第二行工作。逻辑的下一部分是一个运行四次的循环,每次迭代执行O(1)工作。因此,这个内环也可以起作用(O)。最后,剩下的循环做O(1)工作。因此,循环的每次迭代都会使O(1)工作。

那么外循环执行多少次?好吧,循环是

while x < n do

x从零开始,并注意在每次迭代时,循环递增x四次并递减x两次。因此,在循环的每次迭代中,x增加2。因此,循环迭代次数大致为n / 2 = O(n)。

由于循环运行O(n)次并且每次迭代都执行O(1),因此这里完成的总工作是O(n)。

希望这有帮助!