进行n-m运算的算法的大O是多少,其中m是迭代次数?

时间:2012-09-17 00:32:57

标签: algorithm big-o

我写了一个算法,在未排序的列表中查找重复项。它在每次迭代时进行n-m次操作,其中m是迭代次数,n是输入列表的大小。它的大O是什么?

2 个答案:

答案 0 :(得分:7)

为O(n ^ 2)。这里的工作是n+(n-1)+(n-2)+...+1 = n(n+1)/2

更直观的方式是,您至少n/2至少n/2次迭代工作,因此您至少可以n^2/4工作。

答案 1 :(得分:4)

  (n - m) + (n - m - 1) + (n - m - 2) + ... + (n - m - m)
= (n * m) + m + (m - 1) + (m - 2) .. - (m - m)     # Group the `n`s
= (n * m) + (1 + 2 + .. + m)                       # Carefully reverse this sum
= (n * m) + 0.5 * m * (m + 1)                      # sum(1...n) = n(n+1)/2

m的范围应从0n,所以:

= (n * n) + 0.5 * n * n + 0.5 * n                  # Just substitute `n` for `m`
= 3/2 * n^2 + 0.5 * n                              # Combine the `n^2` terms
-> 3/2 * n^2                                       # n^2 >> n for large enough n
=> n^2                                             # Drop the constant

我可能有点过于冗长。