对于i来说,复杂性是多少:对于o = i + 1

时间:2013-01-13 17:04:11

标签: algorithm complexity-theory

for i = 0 to size(arr)
   for o = i + 1 to size(arr)
      do stuff here

这是最糟糕的时间复杂性?它不是N ^ 2,因为第二个每i循环减少一个。它不是N,它应该更大。 N-1 + N-2 + N-3 + ... + N-N + 1。

4 个答案:

答案 0 :(得分:9)

N ^ 2,因为它是两种线性复杂性的产物。

(渐近复杂性被称为渐近而不是相同 ......)

请参阅Wikipedia's explanation on the simplifications made

答案 1 :(得分:2)

将其想象为使用n x n矩阵。您正在处理矩阵中一半的元素,但O(n ^ 2/2)与O(n ^ 2)相同。

答案 2 :(得分:1)

n*(n-1)/2等于O(n^2)

答案 3 :(得分:1)

当您想要确定算法的复杂性类时,您只需要在算法的复杂度函数中找到增长最快的术语。例如,如果您有复杂度函数f(n)=n^2-10000*n+400,要查找O(f(n)),您只需在函数中找到“最强”的术语。为什么?因为n足够大,只有那个术语决定了整个函数的行为。话虽如此,很容易看出f1(n)=n^2-n-4f2(n)=n^2都在O(n^2)。但是,对于相同的输入大小n,它们不会运行相同的时间。

在您的算法中,如果n=size(arr)do stuff here代码将运行f(n)=n+(n-1)+(n-2)+...+2+1次。很容易看出f(n)代表算术系列的总和,即f(n)=n*(n+1)/2,即f(n)=0.5*n^2+0.5*n。如果我们假设do stuff hereO(1),那么您的算法的复杂度为O(n^2)

  

表示i = 0到大小(arr)

我认为当i变得大于size(arr)时,循环结束,不等于。但是,如果是后者,则为f(n)=0.5*n^2-0.5*n,并且它仍在O(n^2)中。请记住,O(1),O(n),0(n^2),...是复杂性类,算法的复杂性函数是对于输入大小n描述算法中有多少步骤的函数。