运行 有条件循环的时间(步数)
Run time (number of steps) of loops with conditions
我不确定如何根据输入大小 N 确定 运行 时间,尤其是当它进入具有某些限制的循环时。这就是我尝试过的。我猜常数是正确的。它看起来如何?
i = 1; //1
k = n; //1
while (i <= k) { //N+1
while (i <= k && A[i] < 0) { //i+2
i = i + 1; //2i
}
while (i <= k && A[k] >= 0) { //i+2
k = k - 1; //2i
}
printf("..."); //1
i = i + 1; //1
k = k - 1; //1
}
这就是所谓的蜡烛两端燃烧。 i
和 k
将在中间某处相遇,但数组中的每个元素都只访问一次。所以 运行 时间是 O(n).
外部 while
循环只是在等待进程完成,因此不会影响 运行ning 时间的计算。第一个内部 while
循环将 i
向右移动,直到它被卡住。第二个内部 while
循环将 k
向左移动,直到它卡住。
行
i = i + 1;
k = k - 1;
将 i
和 k
移动到他们卡住的位置。
结果是i
访问了部分数组元素,k
访问了其他数组元素,但每个数组元素只访问一次。
我不确定如何根据输入大小 N 确定 运行 时间,尤其是当它进入具有某些限制的循环时。这就是我尝试过的。我猜常数是正确的。它看起来如何?
i = 1; //1
k = n; //1
while (i <= k) { //N+1
while (i <= k && A[i] < 0) { //i+2
i = i + 1; //2i
}
while (i <= k && A[k] >= 0) { //i+2
k = k - 1; //2i
}
printf("..."); //1
i = i + 1; //1
k = k - 1; //1
}
这就是所谓的蜡烛两端燃烧。 i
和 k
将在中间某处相遇,但数组中的每个元素都只访问一次。所以 运行 时间是 O(n).
外部 while
循环只是在等待进程完成,因此不会影响 运行ning 时间的计算。第一个内部 while
循环将 i
向右移动,直到它被卡住。第二个内部 while
循环将 k
向左移动,直到它卡住。
行
i = i + 1;
k = k - 1;
将 i
和 k
移动到他们卡住的位置。
结果是i
访问了部分数组元素,k
访问了其他数组元素,但每个数组元素只访问一次。