Complexity theory 复杂度计算

Complexity theory 复杂度计算,complexity-theory,Complexity Theory,以下各项的复杂性是什么: int f4(int n) { int i, j, k=1, count = 0; for(i = 0; i < n; i++) { k *= 3; for(j = k; j; j /= 2) count++; } return count; } intf4(intn) { int i,j,k=1,计数=0; 对于(i=0;i

以下各项的复杂性是什么:

int f4(int n)
{
   int i, j, k=1, count = 0;

   for(i = 0; i < n; i++) 
   {
      k *= 3;

      for(j = k; j; j /= 2)
         count++;
   }

   return count;
}
intf4(intn)
{
int i,j,k=1,计数=0;
对于(i=0;i

我知道它是O(n^2),但是你怎么计算呢?为什么不是n*logn?

有n个外部循环。在任何点,
k=3i
。有
log2(k)
内部循环(因为我们在每次迭代中将
j
减半)

log2(3i)=log3(3i)/log3(2)=i/(常数)

因此,内部循环的复杂性是
i
。换句话说,这个程序的复杂性(但迭代次数不完全相同)与

int f4changed(int n)
{
int i,j,计数=0;
对于(i=0;i

这是
O(n2)

i=1导致(内部循环的)3次迭代(3,1,0)
i=2是8(5然后是3)
i=3等于13(7+5+3)

你们所得到的是近似于a,也就是O(n2)

要了解完整性(并解释为什么迭代的确切次数无关紧要),请参考(这比你更适合其他读者,因为你似乎知道发生了什么)。

日志的复杂性(Pow(3,n))~O(n)。 如果内部循环是k*=2,那么迭代次数也应该是n
在计算O(~)时,使用了最高幂项,而忽略了其他项。Log(Pow(3,n))可以限定为:

Log(Pow(2,n))看了你的其他问题后,似乎你只是想完成你当前的家庭作业。。。祝你好运:-)我正在寻找一些硬件问题的答案,我不知道自己该如何解决这些问题,但我不想让别人把它们都解决掉。我只是想了解复杂性是如何运作的。科尔曼·莱斯特森·里维斯特和斯坦。那本大白皮书。按名称索要。我可以建议为电源编写
3i
,以避免与按位异或混淆吗?
int f4changed(int n)
{
   int i, j, count = 0;

   for(i = 0; i < n; i++) 
   {
      for(j = 0; j < i; j++)
      {
          count++;
      }
   }
}