算法的时间复杂度?

时间:2015-06-08 22:34:49

标签: algorithm time-complexity

这是算法:我认为它的时间复杂度是O(n ^ 2),因为循环中的循环。我该如何解释?

FindSum(array, n, t) 
i := 0 
found := 0 
array := quick_sort(array, 0, n - 1) 
 while i < n – 2 
            j = i + 1 
            k = n - 1 
        while k > j 
             sum = array[i] + array[j] + array[k] 
             if sum == t 
                 found += 1 
                  k -= 1 
                  j += 1 
            else if sum > t 
                 k -= 1 
            else 
                 j += 1 

1 个答案:

答案 0 :(得分:2)

是的,复杂性确实是O(n^2)

内部循环在k-j = n-1-(i+1) = n-i-2(k-j)/2 = (n-i-2)/2次迭代之间运行。

总结i从0到n-2的所有可能值,为您提供:

T = n-0-2 + n-1-2 + n-2-2 + ... + n-(n-2)-2
  = n-2 + n-3 + ... + 0

这是算术级数的总和,它是(n-1)(n-2)/2sum of arithmetic progression)的总和,它是二次曲线。注意除以额外的2(对于&#34;最佳&#34;内环的情况)不会改变大O表示法的时间复杂度。