Сложность времени - рекурсивный вызов

Я пытаюсь понять, как вычислить временную сложность алгоритма.

У меня есть этот кусок кода: это весь метод:

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). Я прав?

Спасибо

2 ответа

Решение

Сложность должна быть O(N^2) как у вас будет N + (N-1) + (N-2) + 1 = N ( N + 1 ) / 2 итерации в худшем случае.

Сложность O(i^2), n здесь неважно.

Функция запустится i раз (до i<2). каждая итерация будет выполняться i раз (n-(n-i+1)=i-1).

Мы можем назвать это O(N^2) когда N упоминание i,

Заметка! N а также n здесь не то же самое!

Другие вопросы по тегам