这种算法的最坏情况时间复杂度是多少?

时间:2009-01-09 13:40:30

标签: algorithm complexity-theory

procedure matrixvector(n:integer);
var i,j:integer;
begin
  for i<-1 to n do begin
    B[i] = 0;
    C[i] = 0;
    for j<-1 to i do 
      B[i]<- B[i]+ A[i,j];
    for j<-n down to i+1 do
      C[i]<-C[i] + A[i,j]
  end
end;

3 个答案:

答案 0 :(得分:7)

O(n ^ 2),如果我读得对。

为什么你需要两个内循环超出我的范围。为什么不在同一个循环中求和B和C?

答案 1 :(得分:1)

最坏的情况是O(n²)。

确实存在三个循环,但并非所有循环都在彼此内部,因此给出O(n²)。

另外,你可以清楚地看到内部循环不会从1到n(就像外部循环一样)。但是因为这只会将时间复杂度改变一些常数,我们可以忽略它并说它只是O(n ^ 2)。

这表明时间复杂度是一种衡量标准:您的算法将按此顺序缩放,并且不会再花费更长时间。 (但总是可以更快)

有关“计算”任何算法的最坏情况复杂性的更多信息,我可以指向related question I asked earlier

答案 2 :(得分:0)

只是为初学者详细解释:

最外面的for循环将运行n次(0到n) 然后在最外面的循环中有两个for循环。 第一个for循环将从1变为n(1 + 2 + 3 + 4 + ..... + n) 第二个for循环将从n变为1(n + n-1 + n-2 + .... + 1)

(1 + 2 + 3 + 4 + 5 + .... + n)的求和公式为n(n + 1)/ 2

所以总运行时间可以计算为n + n(n + 1)/ 2 + n(n + 1)/ 2

观察该等式中的最高多项式,它是n ^ 2.

我们可以进一步简化这个等式并删除常数并忽略线性部分,这将给我们一个n ^ 2的运行时间。