Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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
C 循环的时间复杂度_C_Time Complexity_Complexity Theory - Fatal编程技术网

C 循环的时间复杂度

C 循环的时间复杂度,c,time-complexity,complexity-theory,C,Time Complexity,Complexity Theory,我不确定以下C代码块的复杂性: int i = 0, j = 1; for ( i = 0; i < n * n; i += j ) { O1(); j += 2; } inti=0,j=1; 对于(i=0;i

我不确定以下C代码块的复杂性:

int i = 0, j = 1;
for ( i = 0; i < n * n; i += j )
{
    O1();
    j += 2;
}
inti=0,j=1;
对于(i=0;i
其中O1是一个显然需要恒定时间执行的函数。现在,我知道循环的计数器每次迭代都会增加一个常量,其复杂度通常为
O(sqrt(n))
,但这里也是这样吗?或者是
O(sqrt(n^2))
,也就是
O(n)

谢谢

我知道循环的计数器在每次迭代中增加一个常量,其复杂度通常为O(sqrt(n))

那是假的。一个循环,其计数器在每次迭代中增加一个常量是O(N)

一个循环,其计数器的增加量在每次迭代中线性增加,即为O(sqrt(N))

在本例中,
N
这里是
N*N
,因为这就是循环的循环,所以简单的替换告诉您,是的,操作是O(sqrt(N^2))或O(N)

我知道循环的计数器在每次迭代中增加一个常量,其复杂度通常为O(sqrt(n))

for(i = 0; i < n; i++)
这是一个算术级数。它也可以写成

0^2 - 1, 1^2 - 1, 2^2 - 1, 3^2 - 1, 4^2 - 1, 5^2 - 1, 6^2 - 1, ...

现在循环将一直运行,直到
i
达到
n^2
,(
i

因此,您可以从中推断,循环将运行
O(n)

因此,复杂性是O(n)

它是O(n),因为循环将精确地迭代
n次

在第1步中:
i
的值为
1*1-1
,即
0

在第2步中:
i
的值将是
2*2-1
,即
3

在第3步中:
i
的值将是
3*3-1
,即
8

在交互n上:
i
的值将是
n*n-1
。这将导致循环终止


总之,
i
的增长速度足够快,可以在
n
迭代中达到
n*n-1

变量i遵循一个算术过程:实际上,它是一个算术序列或二次序列。它不会精确迭代n次。它是O(n),但那里有一个系数。@Servy,它将精确地迭代
n
次,您可以验证。谢谢您的更正和确认我的怀疑。如果计数器以几何级数增加呢?请提供证据!i=S(n)=n*(n+1)/2@w.kovacs然后,执行的操作数与几何数成反比。@Servy如何用大O表示法表示?@w.kovacs,这将是对数。
0^2 - 1, 1^2 - 1, 2^2 - 1, 3^2 - 1, 4^2 - 1, 5^2 - 1, 6^2 - 1, ...