嵌套While循环Big O。估计

时间:2020-01-23 07:20:15

标签: performance big-o nested-loops

int i = 0;
int n = 20;

while (i < n)
{
  i++;
  int j = i;

  while (i < n)
  {
    printf("this is %d", i);
    i++;
  }

  i = j;
}

因此,要估算此函数的时间复杂度,我的估算方法是外循环运行n次。内循环运行n - 1次?那么此嵌套循环的时间复杂度O(n^2)吗?

2 个答案:

答案 0 :(得分:1)

您可以重写初始代码

$.ajax({
    type: 'get',
    url: url,
    success: function (data) {
        if (data[0] != null) {
            console.log('has data');
        } else {
            console.log('does not have data');
        }
    }
});

转换为等效的

int n = 20;
int i = 0;

while (i < n) 
{
  i++;
  int j = i;

  while (i < n) 
  {
    printf("this is %d",i);

    i++;
  }

  i = j;
}

现在很明显,您有int n = 20; for (int i = 1; i < n; ++i) for (int j = i; j < n; ++j) printf("this is %d", j); 的时间复杂度:您有

O(n**2)

操作((n - 1) + (n - 2) + (n - 3) + ... + 3 + 2 + 1 = n * (n - 1) / 2 )和

printf(...)

答案 1 :(得分:0)

在随后的迭代中,内循环运行次数为n-1,n-2,n-3,...,1。因此,总和为n(n-1)/ 2,这导致渐近时间复杂度为O(n ^ 2)。