以下伪代码的时间复杂度是多少?

时间:2016-08-26 18:25:42

标签: function time-complexity big-o pseudocode

XYZ(a, b, c, m, n){

For p = 1 to m do
    For q=p to n do
        c[p,q] = a[p,q] + b[p,q];}

我认为它是n + n-1 + n-2 + ..... +(n-m + 1)。但我不确定。是这还是m * n?

1 个答案:

答案 0 :(得分:0)

让我们简化您的代码:

For p from 1 to m
    For q from p to n
        Do something

假设Do something部分是在恒定时间内完成的,那么决定代码时间复杂度的是两个循环。外循环运行m次,而内循环运行n-p,p从1到m。

如果m >= n,则Do something部分会重复n+(n-1)+...+1 = n*(n+1)/2 = n²/2 + n/2 = O(n²)次。

否则,如果n > m,则重复n+(n-1)+...+(n-m+1) = (n*(n+1) - (n-m)*(n-m+1))/2 = 1/2 * (n² + n - n² + 2*n*m - n - m² + m) = O(2*n*m - m²) = O(n²)次。

在任何情况下,O(n²)都是正确答案,但如果n >> m,更准确的答案是O(n*m)