[英]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=200
而g(x)
仍然会更大。
附带说明一下,由于我们可以分解出常量,因此在计算大的O时间复杂度时不必计数每个操作。 您只需要查看循环。 一次发生n
次,另一次发生log(n)
次。 因此它是O(n*log(n))
。 该代码可以在每个循环内执行1000次操作,也可以执行2次。因为常量是从我们的O方程中分解出来的,所以该数目无关紧要。 只有循环的数量和性质。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.