Algorithm 有条件的循环的运行时间(步数)
我不知道如何根据输入大小N来确定运行时间,特别是当它进入具有某些限制的循环时。这就是我所尝试的。我猜常数是正确的。看起来怎么样Algorithm 有条件的循环的运行时间(步数),algorithm,performance,big-o,Algorithm,Performance,Big O,我不知道如何根据输入大小N来确定运行时间,特别是当它进入具有某些限制的循环时。这就是我所尝试的。我猜常数是正确的。看起来怎么样 i = 1; //1 k = n; //1 while (i <= k) { //N+1 while (i <= k && A[i] < 0) { //i
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=1//1.
k=n//1.
虽然(i)P>这被称为从两端燃烧蜡烛。<代码> i < /> >和<代码> k>代码>将在某个地方相遇,但是数组中的每个元素都恰好访问一次。因此运行时间为O(n)。
外部while
循环只是等待进程完成,因此不考虑运行时间的计算。第一个内部while
循环向右移动i
,直到卡住为止。第二个内部while
循环向左移动k
,直到卡住为止
台词
i = i + 1;
k = k - 1;
移动i
和k
经过卡滞点
结果是,i
访问了一些数组元素,k
访问了其他数组元素,但数组的每个元素只访问了一次。Ahh我看到了!每行中的步数正确吗?例如,在第一个内部while循环中,我看到其中一个条件是[i]<0我不认为这是真的,因为我从1开始?