我试图了解如何计算算法的时间复杂度。
我有这段代码: 这是整个方法:
public void solve(int i) {
if(i < 2) {
return;
}
solve(i-1); //recursive call
int x = v[n-i];
for(int j = n-i+1; j < n; j++) {
if(x > v[j]) {
count++;
}
}
return;
}
我认为复杂性是O(n)。我对吗?
由于
答案 0 :(得分:0)
复杂性应为O(N^2)
,因为在最坏的情况下,您将进行N + (N-1) + (N-2) + 1 = N ( N + 1 ) / 2
次迭代。
答案 1 :(得分:0)
复杂性为O(i^2)
,n
无论如何。
该函数将运行i
次(直到i<2
)。每次迭代将运行i
次(n-(n-i + 1)= i-1)。
我们可以在O(N^2)
提及N
时将其称为i
。
注意! N
和n
在这里不一样!