📜  门| GATE-CS-2015(Set 1)|第65章

📅  最后修改于: 2021-06-29 03:01:42             🧑  作者: Mango

考虑下面的C函数。

int fun1 (int n)
{
   int i, j, k, p, q = 0;
   for (i = 1; i 1; j = j/2)
         ++p;
      for (k = 1; k < p; k = k*2)
         ++q;
   }
   return q;
}

以下哪个最接近函数fun1的返回值?
(A) 3
(B) n(登录) 2
(C)登录
(D) nlog(登录)答案: (D)
解释:

int fun1 (int n)
{
   int i, j, k, p, q = 0;

   // This loop runs Θ(n) time
   for (i = 1; i < n; ++i)
   {
      p = 0;

      // This loop runs Θ(Log n) times. Refer this 
      for (j=n; j > 1; j=j/2)
         ++p;
     
      // Since above loop runs Θ(Log n) times, p = Θ(Log n)
      // This loop runs Θ(Log p) times which loglogn
      for (k=1; k < p; k=k*2)
         ++q;
   
   }
   return q;
}

T(n)= n(logn + loglogn)
T(n)= n(logn)占优

但请注意,这里我们返回的是位于loglogn中的q,因此ans应该为T(n)= nloglogn

有关详情,请参阅此。
这个问题的测验