O(登录)while循环的运行时间?

时间:2018-10-09 20:34:05

标签: runtime time-complexity big-o

我在网上看到了这两个示例,我试图找出每个示例的运行时。我对这两种运行时都可能是一个猜测,但是我对第二个问题不是很肯定。

    int temp=0;
    int i=0;
    while(temp < n){
        arr[i]++;
        i++;
        temp = i*i;
    }

我相信它的运行时是O(log n),因为while循环运行了大约n * 2次,这让我认为是这样。

int i = 0;
int j = 1;
while (j<n){
    i++;
    if(i==n){
        i = 0;
        j = j*2;
    }
}

我对此的最佳猜测也是O(logn)。我真的不知道如何考虑这个问题。我知道每个子问题(进入if语句)运行n次。因此,运行时约为O(n * 3)(我认为)== O(logn)。

1 个答案:

答案 0 :(得分:2)

第一个片段等效于:

int i=0;
while(i*i < n){
    arr[i]++;
    i++;
}

具有复杂性O(sqrt(n)),因为i*i < ni < sqrt(n)相同。

第二次

int i = 0;
int j = 1;
while (j<n){
  i++;
  if(i==n){
    i = 0;
    j = j*2;
  }
}

让我们观察到jn移至2*j之后被重置了。如果发生这种情况k次,则j将成为2^k。由于限制为n,因此我们有2^k < nk < lg(n)。总之,将有lg(n)j重置,每个重置都涉及n个步骤。因此,复杂度为O(n lg(n))