Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 有条件的循环的运行时间(步数)_Algorithm_Performance_Big O - Fatal编程技术网

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

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

我不知道如何根据输入大小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=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开始?