2016-08-26 109 views
1
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?下面的伪代码的时间复杂度是多少?

+0

提示:'1 + 2 + 3 + ... + N =(N + 1)* N/2'在 – 4386427

+0

一个字 - O(m * n个)。 –

回答

0

让我们简化代码:

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

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

如果m >= nDo 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)

相关问题