Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 以下循环的时间复杂度应该是多少?_Loops_Time Complexity - Fatal编程技术网

Loops 以下循环的时间复杂度应该是多少?

Loops 以下循环的时间复杂度应该是多少?,loops,time-complexity,Loops,Time Complexity,请检查以下时间复杂性是否正确 循环1 for(int i =0; i*i < n; i+=2) for(int i=0;i*i

请检查以下时间复杂性是否正确

循环1

for(int i =0; i*i < n; i+=2)
for(int i=0;i*i
我认为在这个循环中完成的功将是O(sqrt(n),因为我知道当我达到sqrt(n)时,条件将得到满足。此外,incrementor(i+=2)将导致结果以n/2的速度完成,因此完成的总体工作将是sqrt(n)/2

循环2

for(int i =0; i*i < n; i*=2)
for(int i=0;i*i
我认为在这个循环中所做的工作将是O(log(n)),因为与前面的问题相比,唯一改变的是incrementor(I*=2),它将导致循环以log(n)次运行。所以总的功变成log(sqrt(n)),变成O(log(n))


PS:如果有人有一张关于各种循环或嵌套循环的时间复杂性的备忘单,请分享。非常感谢您的帮助。

在第一种情况下,您的假设是正确的。时间复杂度为O(sqrt(n))。在计算时间复杂度时,我们不考虑incrementor+=2,因为我们只考虑最高的幅度修改器,在这种情况下,i*i
在第二种情况下,你是对的。但是,请注意,循环从i=0开始,由于该变量的增量是在i*=2时完成的,因此它将永远保持值0,因为0*2=0。

O(log(sqrt(n))
只是
O(log(n))
。哦,我忘记了日志规则。谢谢,我将编辑问题谢谢。如果循环以1开头,那么“我的答案”是对还是错?是的,应该是。虽然我会将I*I