繁体   English   中英

时间复杂度:While循环和嵌套的for循环[java]

[英]Time Complexity: While loop with nested for Loop[java]

因此,我才刚刚开始学习时间复杂性,对此我有些“了解”,但是我对如何处理此代码段有些困惑。 我读过其他文章,但是除非有人拒绝我要说的话,否则我很难掌握所有内容。 有点像打耳光。

public int example(int[] array) {

    int result = 15;
    int i = array.length;

    while(i > 1)
    {
      for(int x = 0; x < array.length;x++)
      {
        result+= 1;
        result+=2*array[x];
      }
      i = i/2; 
    }
return result;
}

好吧,我只算算术运算。 根据我的信念,如果我错了(可能是错),请纠正我,

x ++发生n次。

result + = 1次发生n次。

结果+ = 3 * array [x]发生2n次

共计4n

并且我= i / 2发生登录时间

那么正确的方程式是4nlogn ??

您使用4n*log(n)处在正确的轨道上。 但是,请注意,由于O时间复杂度较大,因此将删除常量,因此将为O(n*log(n))

由于O定义大而删除了常数:如果f(z) <= c*g(z)对于所有z >某个数,则f(x)O(g(x)) 这里的关键是c ,它可以是任何常数。 即使您的f(x)100x您仍然可以拥有c=200g(x)仍然会更大。

附带说明一下,由于我们可以分解出常量,因此在计算大的O时间复杂度时不必计数每个操作。 您只需要查看循环。 一次发生n次,另一次发生log(n)次。 因此它是O(n*log(n)) 该代码可以在每个循环内执行1000次操作,也可以执行2次。因为常量是从我们的O方程中分解出来的,所以该数目无关紧要。 只有循环的数量和性质。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM