具有条件的循环的运行时间(步数)

时间:2016-09-28 22:11:31

标签: algorithm performance big-o

我不确定如何根据输入大小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
}

1 个答案:

答案 0 :(得分:3)

这被称为从两端燃烧蜡烛。 ik将在中间的某个地方相遇,但数组中的每个元素只访问一次。所以运行时间是 O(n)

外部while循环只是等待进程完成,因此不会考虑运行时间的计算。第一个内部while循环向右移动i直到它卡住。第二个内部while循环向左移动k直到它被卡住。

i = i + 1;
k = k - 1;

ik移到他们卡住的点之后。

结果是i访问了一些数组元素,k访问了其他数组元素,但数组的每个元素只访问过一次。