使用 Big-Oh 分析 while(key <= N*N) 循环的复杂度
Complexity analysis of while(key <= N*N) loop using Big-Oh
我对这个 while 循环的 Big-O 表示法感到困惑,其中 N 是输入大小:
int array[0][(N-1)/2] = 1;
int key = 2,k,l;
i = 0;
int j = (N-1)/2;
while(key <= N*N)
{
if(i <= 0)
k = N-1;
else
k = i-1;
if(j <= 0)
l = N-1;
else
l = j-1;
if(array[k][l])
i = (i+1)%N;
else
{
i = k;
j = l;
}
array[i][j] = key;
key++;
}
I concluded it as O(N<sup>2</sup>)
因为当 N=5 时,它会迭代直到 N*N,即 5*5=25 次,但我仍然对循环内的其余代码感到困惑。如果有人能一步一步地解释代码,我将不胜感激,这个循环只是一个更大的函数的一部分,它有 4 个循环,我理解但不是这个循环。
你真正应该关心的是,k如何变化。它在每次迭代中增长 1,这里没有捷径。
所以它只是 O(N2).
我对这个 while 循环的 Big-O 表示法感到困惑,其中 N 是输入大小:
int array[0][(N-1)/2] = 1;
int key = 2,k,l;
i = 0;
int j = (N-1)/2;
while(key <= N*N)
{
if(i <= 0)
k = N-1;
else
k = i-1;
if(j <= 0)
l = N-1;
else
l = j-1;
if(array[k][l])
i = (i+1)%N;
else
{
i = k;
j = l;
}
array[i][j] = key;
key++;
}
I concluded it as O(N<sup>2</sup>)
因为当 N=5 时,它会迭代直到 N*N,即 5*5=25 次,但我仍然对循环内的其余代码感到困惑。如果有人能一步一步地解释代码,我将不胜感激,这个循环只是一个更大的函数的一部分,它有 4 个循环,我理解但不是这个循环。
你真正应该关心的是,k如何变化。它在每次迭代中增长 1,这里没有捷径。
所以它只是 O(N2).