Function 以下伪代码的时间复杂度是多少?
我认为它是n+n-1+n-2+…+(n-m+1)。但我不确定。是这个还是m*n?让我们简化您的代码: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)
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)。