你如何证明这整个循环序列是O(n)?或者是O(n)?乍一看,只看一下双循环可能会认为它是O(n ^ 2),但我认为不是......
int i = 0;
int arr[N];
int idx = 0;
for (i = 0; i < 2; i++)
{
for (j = 0; j < N/2; j++)
{
idx = (i * N/2) + j;
foo(arr[idx]);
}
}
答案 0 :(得分:2)
外部循环是常量,因此循环与执行:
相同for (j = 0; j < N/2; j++)
{
idx = (0 * N/2) + j;
foo(arr[idx]);
idx = (1 * N/2) + j;
foo(arr[idx]);
}
这实际上使代码的意图更加清晰,但正如您所看到的,操作量与N成线性关系,因此它是O(N)复杂度而不是指数增长。我不能解释得更好,因为它是早上8点30分,我没有睡觉,但我想你得到了我的要点。