重复检查功能的大O.

时间:2017-08-11 01:26:19

标签: c

我想确切地知道如何计算第二个大O,而重复次数会随着时间的推移而减少。

int duplicate_check(int a[], int n) 
     {
      int i = n; 
       while (i > 0) 
       {
          i--; 
          int j = i - 1; 
         while (j >= 0) 
          { 
            if (a[i] == a[j]) 
               { 
                 return 1; 

               } 

           j--; 
          } 
        }
    return 0; 
}

3 个答案:

答案 0 :(得分:3)

无论重复次数较少,仍为O(n^2)

您正在计算的值是Sum of (n-k) for k = 0 to n.

这相当于(n^2 + n) / 2,因为O()忽略常量而次要条件是O(n^2)

请注意,您可以通过对数组O(nlogn)进行排序,然后搜索两个相同的O(n)连续数字来更有效地解决此问题,因此总计O(nlogn)

答案 1 :(得分:1)

大O是估算/理论速度,它不是精确的计算。

就像twain249所说的那样,时间复杂度是O(n^2)

答案 2 :(得分:0)

BigO显示算法的最坏情况时间复杂度,这意味着算法可以采用的最长时间。它显示上限,表明无论输入是什么,时间复杂度总是在该范围之下。 在你的情况下,最糟糕的情况是当我迭代到0然后复杂性将是:

因为i = n j将运行n-1次,因为i = n-1 j将运行n-2次,依此类推。 加上所有(n-1)+(n-2)+(n-3)+ ............(nn)=(n-1)*(n)/ 2 = n ^ 2/2-n / 2个 在忽略n为低位且1/2为常数后,它变为n ^ 2。 所以O(n ^ 2)是如何计算的。