Как рассчитать порядковую сложность следующего алгоритма - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь вычислить временную сложность этого кода, который суммирует нечетные числа массива. Я использовал два метода, и теперь мне нужно рассчитать сложность заказа O (n)

Этот метод выполняется с помощью слабого постусловия.

private static int sumaImparDebilit(int t[], int desde, int hasta) {
    if (desde==hasta) {
        if ((t[desde] % 2) == 1) {
            return t[desde];
        }
        return 0;
    } 
    if (t[desde]%2 == 1) {
        return (t[desde] + sumaImparDebilit(t,(desde+1),hasta));
    }
    return (sumaImparDebilit(t,(desde+1),hasta));

}

Этот выполняется с помощью сильного предварительного -условие.

private static int sumaImparFortalec(int t[], int hasta, int limite, int parcial) {
    if (hasta <= limite) {
        if ((t[hasta] % 2) == 1) {
            return sumaImparFortalec(t,(hasta + 1),limite,(parcial + t[hasta]));
        } else {
            return sumaImparFortalec(t,(hasta + 1),limite,(parcial));
        }
    }
    else {
        return parcial;
    }
}

1 Ответ

0 голосов
/ 29 мая 2020

Я не знаю, что вы имеете в виду под «слабыми» и «сильными» условиями, но оба имеют временную сложность O (n) и используют (без уважительной причины) рекурсию.

Конечно, это самый простой , и самый быстрый:

int sum = 0;
for (int i = 0; i < t.length; i++)
    if (t[i] % 2 == 1)
        sum += t[i];
...