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

Function 以下伪代码的时间复杂度是多少?,function,time-complexity,big-o,pseudocode,Function,Time Complexity,Big O,Pseudocode,我认为它是n+n-1+n-2+…+(n-m+1)。但我不确定。是这个还是m*n?让我们简化您的代码: 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];} 假设Do something部分是在固定时间内完成的,那么决定代码时间复杂度的是两个循环。外循环运行m次,而内循环运行n-p,p从1到m 如果m>=n,则做某事部分将重复n+(n-1)+…+1=n*(n+1)

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

让我们简化您的代码:

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];}
假设
Do something
部分是在固定时间内完成的,那么决定代码时间复杂度的是两个循环。外循环运行
m
次,而内循环运行
n-p
,p从1到m

如果
m>=n
,则
做某事
部分将重复
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²+2*n*m-n-m²+m)=O(2*n*m-m²)=O(n²)


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

让我们简化您的代码:

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];}
假设
Do something
部分是在固定时间内完成的,那么决定代码时间复杂度的是两个循环。外循环运行
m
次,而内循环运行
n-p
,p从1到m

如果
m>=n
,则
做某事
部分将重复
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²+2*n*m-n-m²+m)=O(2*n*m-m²)=O(n²)

在任何情况下,
O(n²)
都是正确的答案,但如果
n>>m
,更精确的答案是
O(n*m)
提示:
1+2+3+…+n=(n+1)*n/2
在一个单词中-O(m*n)。提示:
1+2+3+…+n=(n+1)*n/2
在一个单词中-O(m*n)。